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即可