Linux下对后台进程通过kill传递信号不起作用的问题

在阅读APUE信号一章时,我遇到Linux下对后台进程通过kill传递信号不起作用的问题

具体情形与如下链接中的老兄一致:

http://bbs.csdn.net/topics/390335913?page=1#post-395188120

 

编译执行下面的信号程序,然后再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");

else	if(signo==SIGUSR2)

   printf("received sIGUSR2\n");

else

   err_dump("received signal %d\n",signo);

}


这是我的解决方案:

 

这个问题应该是linux的进程后台运行的实现问题。可以换种方法进行实验:
1 在程序中加入打印getpid()函数
2 在前台运行该程序
3 新开一个终端窗口,在新开的终端窗口中输入:kill -USR1 [pid]
4 返回原终端,查看实验结果


kill

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

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

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


 

你可能感兴趣的:(linux)