プログラムが SIGHUP シグナルを受信すると、すべてのアクティブなユーザーとアクティブなプロセスの量をリストし、SIGINT シグナルを受信すると終了するプログラムを作成するタスクがあります。
ユーザーとプロセス数をリストするためにこれを持っています
ps -u "$(echo $(w -h | cut -d ' ' -f1 | sort -u))" o user= | sort | uniq -c | sort -rn
そして、これが私のプログラムで得た場所です。私はそれについて間違った方法で進んでいる可能性があり、少し助けを借りることができます.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <signal.h>
void sig_handler(int signo) {
if (signo == SIGHUP){
int pid = 0;
if (pid = fork() != 0) {
execl("/bin/ps", "ps", "-u", "\"$(echo $(w -h | cut -d ' ' -f1 | sort -u))\"", "o", "user=", "|", "sort", "|", "uniq", "-c", "|", "sort", "-rn", NULL);
} else {
printf("Signal received: SIGINT\nReported by: Parent process\n\n");
}
}
}
int main(void) {
if (signal(SIGHUP, sig_handler) == SIG_ERR)
printf("\nCan't catch SIGINT\n");
while (1)
sleep(1);
return 0;
}