读书人

编译执行上面的信号程序然后再shell

发布时间: 2013-01-28 11:49:56 作者: rapoo

编译执行下面的信号程序,然后再shell命令行:先让程序在后台运行,得到进程ID,然后用kill向该进程发送信号:kill -USR1 ID,但是没有结果
#include "apue.h"

static void sig_usr(int);
int main(void)
{
if(signal(SIGUSR1,sig_usr)==SIG_ERR)
err_sys("can not catch SIGUSR1");
if(signal(SIGUSR2,sig_usr)==SIG_ERR)
err_sys("can not catch SIGUSR2");
for( ; ; )
pause();
}
static void sig_usr(int signo)
{
if(signo==SIGUSR1)
printf("received sIGUSR1\n");
elseif(signo==SIGUSR2)
printf("received sIGUSR2\n");
else
err_dump("received signal %d\n",signo);
}

[解决办法]
kill

功能说明:删除执行中的程序或工作。

语  法:kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]

补充说明:kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或jobs指令查看。
参  数:
 -l <信息编号>  若不加<信息编号>选项,则-l参数会列出全部的信息名称。
 -s <信息名称或编号>  指定要送出的信息。
 [程序]  [程序]可以是程序的PID或是PGID,也可以是工作编号。

读书人网 >C语言

热点推荐