Linux进程之间通信 信号
生活随笔
收集整理的這篇文章主要介紹了
Linux进程之间通信 信号
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 2) SIGINT
程序終止(interrupt)信號, 在用戶鍵入INTR字符(通常是Ctrl-C)時發出,用于通知前臺進程組終止進程。
? - 3) SIGQUIT
和SIGINT類似, 但由QUIT字符(通常是Ctrl-\)來控制. 進程在因收到SIGQUIT退出時會產生core文件, 在這個意義上類似于一個程序錯誤信號。
? - 15) SIGTERM
程序結束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理。通常用來要求程序自己正常退出,shell命令kill缺省產生這個信號。如果進程終止不了,我們才會嘗試SIGKILL。
? - 19) SIGSTOP
停止(stopped)進程的執行. 注意它和terminate以及interrupt的區別:該進程還未結束, 只是暫停執行. 本信號不能被阻塞, 處理或忽略.?
代碼
- 子進程運行到3的時候,會停止,父進程喚醒子進程,子進程接著運行,當子進程到4的時候,中斷退出,所有的進程全部結束
- 前面是要捕捉的信號,后面是針對捕捉的信號對應的處理措施,自己寫的一個函數?
定義自己信號處理函數
#include <sys/types.h> #include <stdio.h> #include <unistd.h> #include <string> #include <signal.h> #include <wait.h>void cancel(int aig){printf("當前程序取消了ctrl+C功能\n"); } int main() {signal(SIGINT,cancel);while (1){printf("*\n");sleep(1);}return 0; }代碼
#include <sys/types.h> #include <stdio.h> #include <unistd.h> #include <string> #include <signal.h> #include <wait.h>void ouch(int aig){printf("OUCH! - I got signal %d\n",aig); } int main() {struct sigaction act;act.sa_handler = ouch;//設置信號處理函數sigemptyset(&act.sa_mask);//初始化信號集act.sa_flags = 0;sigaction(SIGINT,&act, nullptr);while (1){printf("Hello World!\n");sleep(1);}return 0; }- 輸出結果如下圖所示
- 使用 ctrl + \? 停止?
參考鏈接
- C語言waitpid()函數:中斷(結束)進程函數(等待子進程中斷或
- C語言sigaction()函數:查詢或設置信號處理方式
總結
以上是生活随笔為你收集整理的Linux进程之间通信 信号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 短线之王指标,CCI
- 下一篇: linux 编译C++文件 相关指令