1. 用程序发送信号

1.1. kill信号发送函数

原型为:

#include <sys/types.h>

#include <signal.h>

int kill(pid_t pid, int sig);

参数pid为将要接受信号的进程的pid,可以通过getpid()函数获得来给自身发送信号,还可以发送信号给指定的进程,此时pid有如下描述:

pid > 0 将信号发给ID为pid的进程

pid == 0 将信号发送给与发送进程属于同一个进程组的所有进程

pid < 0 将信号发送给进程组ID等于pid绝对值的所有进程

pid == -1 将信号发送给该进程有权限发送的系统里的所有进程

参数sig为要发送的信号

如果成功,返回0,否则为-1

示例,输入结束后,将通过发送信号SIGQUIT把自己杀掉:

#include <stdio.h>

#include <signal.h>

#include <unistd.h>

#include <sys/types.h>

int main()

{

while(1){

if(getchar()==EOF) //运行之后输入没有反应,当按下Ctrl+d(EOF),进程关闭

kill(getpid(),SIGQUIT);

}

return 0;

}

除此之外,还可以向指定的进程发送信号:

程序1:

#include <stdio.h>

int main()

{

while(1);

return 0;

}

程序2:

# include <stdio.h>

#include <signal.h>

#include <unistd.h>

#include <sys/types.h>

int main(int argc, char* argv[])

{

int pid = atoi(argv[1]);

kill(pid,SIGQUIT);

return 0;

}

首先运行程序1,然后用ps –aux查看其进程号,假设位11002。再运行程序2 ./2 11002即可