通过查看信号的语法,我可以看到它不能灵活地将信号传递给另一个pid(pid_t)。进程只能忽略,默认或自定义操作。我们可以将信号传递给另一个过程的可能方式是什么? (我不是在谈论pthreads)。
答案 0 :(得分:4)
您需要kill(2) system call(而不是kill
shell命令):
#include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig);
kill()
系统调用可用于向任何进程发送任何信号 小组或过程。如果pid为正,则将信号sig发送到具有ID的进程 由pid指定。
如果pid等于0,则sig被发送到进程中的每个进程 呼叫过程的一组。
如果pid等于-1,则将sig发送到每个进程 调用进程有权发送信号,但进程1除外 (init),但见下文。
如果pid小于-1,那么sig将被发送到 ID为-pid的进程组。
如果sig为0,则不发送任何信号,但错误检查仍然存在 执行;这可以用于检查进程ID的存在 或处理组ID。
运行man kill
会给你kill(1),这是shell命令。要获取系统调用的手册页,请运行man 2 kill
。