zoukankan      html  css  js  c++  java
  • 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
    ");
    else	if(signo==SIGUSR2)
       printf("received sIGUSR2
    ");
    else
       err_dump("received signal %d
    ",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,也可以是工作编号。 


  • 相关阅读:
    mongodb
    python中读取文件的read、readline、readlines方法区别
    uva 129 Krypton Factor
    hdu 4734
    hdu 5182 PM2.5
    hdu 5179 beautiful number
    hdu 5178 pairs
    hdu 5176 The Experience of Love
    hdu 5175 Misaki's Kiss again
    hdu 5174 Ferries Wheel
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3230975.html
Copyright © 2011-2022 走看看