Linux下對後台進程通過kill傳遞訊號不起作用的問題

來源:互聯網
上載者:User

在閱讀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");elseif(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,也可以是工作編號。 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.