sigintlinux
⑴ linux環境下使用signal函數進行進程間通信的問題
測試了一下,三個進程都會收到SIGINT信號。
原程序中,child1, child2都收到SIGINT信號,調用stop(), 之後被喚醒,列印"child process ... is killed by parent!",事實上kill這兩個child的不是parent,是它們自己的SIGINT。
放到①處,child1收到SIGINT信號,默認的行為是把自己殺了,當然也來不及列印任何東西了。child2收到SIGINT信號,打斷waiting(),列印"child process 2 ...",然後退出。殺死它的也不是SIGUSR2信號。
放到②處,child1, child2收到SIGINT信號,默認的行為是立即把自己殺了,也來不及列印任何東西了。
測試方法:
// 列印誰執行、被什麼信號打斷
static void stop(int signal) {
printf("stop %d by signal %d\n", getpid(), signal);
wait_mark=0;
}
// 在parent進程中,列印各進程id
printf("parent %d, child1 %d, child2 %d\n",getpid(),p1,p2);
如果讓parent成為殺死child的兇手,可以在child1,child2中加入:
signal(SIGINT, keep_me_alive);
// 不理睬SIGINT信號
static void keep_me_alive(int signal) {
}
這時列印結果就一樣了
⑵ linux signal 11 是什麼意思
通過kill -l 可以查看信號列表,11 是段錯誤
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1
36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5
40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9
44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5
60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1
64) SIGRTMAX
⑶ linux中的signal怎麼使用
signal函數的定義很復雜,但是它的用法還是比較簡單的,你記住它的兩個參數就可以了。signal有兩個參數sig和func,signal這個函數是用來接收信號並處理的,所以sig參數表示將要處理哪種類型的信號,而func參數是一個函數指針,用來指定信號的處理函數,也就是當程序接收到sig那個類型的信號後,就會調用func指針指向的函數。func指針的原型是:
void (*func) (int)
所以信號的處理函數必須是一個返回void,只有一個int類型參數的函數。
比如如果程序需要處理Ctrl+C組合鍵產生的信號,就可以這樣使用signal函數:
(void) signal(SIGINT, myfunc);
而myfunc函數可以這樣定義:
void myfunc(int sig)
{
printf("Hello, the signal is %d\n", sig);
// 因為現在處理的是Ctrl+C信號,所以下面要
// 恢復程序對Ctrl+C的默認反應
(void) signal(SIGINT, SIG_DFL);
}
⑷ unix,linux環境編程中關於signal函數和kill函數問題
signal函數調用後會進入系統的信號隊列,具體什麼時候執行是不可控的。
⑸ Linux信號對應的按鍵
ctl+x
ctl+z
ctl+/
其他的信號需要在程序中調用raise來發送。
⑹ 關於linux中信號SIGINT的捕獲問題,求大大們指教
網上有Webtop的破解方法,可在Webtop上安裝全功能版本的Linux。Webtop其實就是一個縮水版的ubuntu。
但是那個Ubuntu是有很大的限制的,和PC的Ubuntu區別很大。基本上是只能上網和使用非常有限的一些應用。要直接使用ubuntu得破解,而且還很麻煩。
我現在就等Webtop到手開工了。
至於Linux支持的CPU,那得看發行版。部分Linux發行版是支持目前所有的商用CPU的,從X86到ARM到IA64通吃,也有部分是高度專精的,如Arch就只支持X86.
不過我強烈不建議用Atrix來做音樂製作系統,畢竟處理能力太弱,據說破解之後正常上網十分鍾手機就變得非常燙。音樂製作那就可想而知了。
還有,你要使用USB音效卡,還得考慮一下音效卡有沒有相應版本的驅動。
總之Webtop並不能算是全功能的筆記本,只能當上網本來用。我買Webtop也主要是因為筆記本太大太重,平時帶著上課做筆記不方便才買來,記筆記基本上只用得到瀏覽器和文本編輯器,這些都不是問題。但是音樂製作,還是用完整的PC為好。
=======================
另外Android並不能算是Linux的發行版。Android的機制是運行在Linux內核上的一套虛擬機程序,其應用和直接基於Linux的本地應用程序有很大的不同,除非重編譯,二進制包是不通用的。
⑺ Linux信號SIGTERM,SIGKILL,SIGINT和SIGQUIT的區別
SIGHUP 終止進程 終端線路掛斷
SIGINT 終止進程 中斷進程
SIGQUIT 建立CORE文件終止進程,並且生成core文件
SIGILL 建立CORE文件 非法指令
SIGTRAP 建立CORE文件 跟蹤自陷
SIGBUS 建立CORE文件 匯流排錯誤
SIGSEGV 建立CORE文件 段非法錯誤
SIGFPE 建立CORE文件 浮點異常
SIGIOT 建立CORE文件 執行I/O自陷
SIGKILL 終止進程 殺死進程
SIGPIPE 終止進程 向一個沒有讀進程的管道寫數據
SIGALARM 終止進程 計時器到時
SIGTERM 終止進程 軟體終止信號
SIGSTOP 停止進程 非終端來的停止信號
SIGTSTP 停止進程 終端來的停止信號
SIGCONT 忽略信號 繼續執行一個停止的進程
SIGURG 忽略信號 I/O緊急信號
SIGIO 忽略信號 描述符上可以進行I/O
SIGCHLD 忽略信號 當子進程停止或退出時通知父進程
SIGTTOU 停止進程 後台進程寫終端
SIGTTIN 停止進程 後台進程讀終端
SIGXGPU 終止進程 CPU時限超時
SIGXFSZ 終止進程 文件長度過長
SIGWINCH 忽略信號 窗口大小發生變化
SIGPROF 終止進程 統計分布圖用計時器到時
SIGUSR1 終止進程 用戶定義信號1
SIGUSR2 終止進程 用戶定義信號2
SIGVTALRM 終止進程 虛擬計時器到時
⑻ 為什麼Linux設置了SIGINT信號捕捉函數,按下Ctrl+C以後還會結束進程
因為Ctrl+C結束是不能阻止的
⑼ linux signal 如何捕獲鍵盤上的del鍵。用信號量sigint只能捕獲Ctrl
int catch( int sig )
{
printf("recv del\n" );
}
int main()
{
signal( SIG_INT, catch );
while( getchar() != '\n' ) ;
return 0;
}
按回車結束程序,按Del會輸出recv del。
不行么