UNIX/Linux:向进程发信号的3种方式
问:怎么向另一个进程发信号?你能跟我解释下在UNIX/Linux环境向一个进程发信号的所有
可用的选项吗?
答:你可以用本文所说的任一种方法向进程发各种信号。
1.用Kill向进程发信号
使用kill命令向进程发信号。例如,你想向进程“a.out”发送USR1信号,如下所示。
$ ps -C a.out
PID TTY TIME CMD
3699 pts/1 00:00:00 a.out
$ kill -s USER1 3699
注意:参考杀死进程的4种方式-kill,killall,pkill,xkill
2.从另一个进程给一个进程发信号
你可以使用UNIX系统调用kill(从一个C程序)从一个进程给另一个进程发信号。下面的C代码段说明怎样使用kill命令。
Kill系统调用接收两个参数: 1) 需要接收信号的进程PID(进程id) 2)需要发送给进程的信号。调用成功,kill命令返回0。
int send_signal (int pid)
{
int ret;
ret = kill(pid, SIGHUP);
printf("ret:%d",ret);
}
3.从键盘给进程发信号
当一个进程在终端上运行,你可以在键盘上通过按一些特定的组合键来给该进程发信号。下面是两个例子。
*SIGINT(Ctrl + C) - 你已经知道这个信号。按“Ctrl + C”杀死正在运行的前台进程。这样发送SIGINT信号给进程杀死它。
* 通过按“Ctrl + ”或“Ctrl + Y”给进程发SIGQUIT信号
你可以如下所示使用“stty -a”命令查看给进程发送特定信号的键映射。
$ stty -a | grep intr
intr = ^C; quit = ^; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
问:怎么向另一个进程发信号?你能跟我解释下在UNIX/Linux环境向一个进程发信号的所有
可用的选项吗?
答:你可以用本文所说的任一种方法向进程发各种信号。
1.用Kill向进程发信号
使用kill命令向进程发信号。例如,你想向进程“a.out”发送USR1信号,如下所示。
$ ps -C a.out
PID TTY TIME CMD
3699 pts/1 00:00:00 a.out
$ kill -s USER1 3699
注意:参考杀死进程的4种方式-kill,killall,pkill,xkill
2.从另一个进程给一个进程发信号
你可以使用UNIX系统调用kill(从一个C程序)从一个进程给另一个进程发信号。下面的C代码段说明怎样使用kill命令。
Kill系统调用接收两个参数: 1) 需要接收信号的进程PID(进程id) 2)需要发送给进程的信号。调用成功,kill命令返回0。
int send_signal (int pid)
{
int ret;
ret = kill(pid, SIGHUP);
printf("ret:%d",ret);
}
3.从键盘给进程发信号
当一个进程在终端上运行,你可以在键盘上通过按一些特定的组合键来给该进程发信号。下面是两个例子。
*SIGINT(Ctrl + C) - 你已经知道这个信号。按“Ctrl + C”杀死正在运行的前台进程。这样发送SIGINT信号给进程杀死它。
* 通过按“Ctrl + ”或“Ctrl + Y”给进程发SIGQUIT信号
你可以如下所示使用“stty -a”命令查看给进程发送特定信号的键映射。
$ stty -a | grep intr
intr = ^C; quit = ^; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;