通常在Linux系统中,可以使用 kill or killall 命令向指定的进程发送信号,以让其执行某种操作。在程序中,也可以使用kill()函数向指定进程发送信号。若使用kill()函数,则需要包含以下头文件,以及kill()函数声明如下。
功能:kill函数将信号sig发送给进程编号为pid的进程;
返回值:成功,返回0;失败,返回-1;
kill函数第一个形参 pid 有三种情况:
a. pid 大于0 :将信号发送给 进程编号为 pid 的进程;
b. pid 等于0 :将信号发送给与当前进程相同进程组的所有进程,常用于父进程向子进程发送信号(注意,此情况下发送者自己也会收到该信号)
c. pid 等于-1 :将信号广播给系统内所有进程(此情况不常用)
(知识点:在多进程的服务程序中,如果子进程收到退出信号,则子进程自行退出;如果父进程收到退出信号,则父进程先向所有子进程发送退出信号,然后再自己退出)
下面图片的代码逻辑比较简单,大致就是 父进程每隔5秒产生一个子进程,所有子进程每隔3秒打印一次运行信息;
如果子进程收到 SIGTERM 信号,则自行退出,并打印退出信息以及中断信号
如果父进程收到 SIGTERM / SIGINT 信号,则先向子进程发送 SIGTERM 退出信号,然后再自己退出
查看 demo 进程,发现已经产生了很多demo子进程,如果使用 kill 2871808 ,则该子进程退出,并打印中断信号为 15
如果想要所有进程都退出,则只需要kill 掉父进程就可以了, e.g: kill 2871575 , 则所有进程都退出,并打印中断信号 15
如果在运行窗口按下 Ctrl+c,则父进程收到信号2退出,所有子进程收到父进程发送的信号15退出
以上就是关于 使用 kill() 函数向进程发送信号的基本操作处理方法,共勉。