日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

进程间通信--信号(SIG)

發布時間:2024/4/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程间通信--信号(SIG) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

信號是內容受限的一種異步通信機制

  • 信號的目的:用來進程間的通信
  • 信號本質上是int型數字編號(事先定義好的);所以說是內容受限的通信機制
  • 信號是異步的(可以類比于硬件中斷)

常見信號介紹

  • SIGINT 2 Ctrl+C時OS送給前臺進程組中每個進程
  • SIGABRT 6 調用abort函數,進程異常終止
  • SIGPOLL SIGIO 8 指示一個異步IO事件,在高級IO中提及
  • SIGKILL 9 殺死進程的終極辦法
  • SIGSEGV 11 無效存儲訪問時OS發出該信號
  • SIGPIPE 13 涉及管道和socket
  • SIGALARM 14 涉及alarm函數的實現
  • SIGTERM 15 kill命令發送的OS默認終止信號
  • SIGCHLD 17 子進程終止或停止時OS向其父進程發此信號
  • SIGUSR1 10 用戶自定義信號,作用和意義由應用自己定義
    SIGUSR2 12
  • 信號的處理方式

    • 忽略信號
    • 捕獲信號(信號綁定了一個信號處理函數)
    • 默認處理(忽略或終止進程)

    相關函數

    #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);

    * 用于注冊信號處理函數的函數
    * 第一個參數是所相應的信號編號(見上)
    * 第二個是函數指針,用于中斷時候的回調

    #include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig);

    * 用于給其他進程發信號的函數
    * 第一個參數是發給 對應進程的PID
    * 第二個參數是對應的信號編號(見上)

    #include <unistd.h>int pause(void);
    • 使得程序掛起
    • 收到信號時繼續執行
    • 內核掛起,讓出 cpu

      #include <unistd.h>unsigned int alarm(unsigned int seconds);
    • 設置一個鬧鐘
    • 到時間后發出SIGALRM信號

    demo:

    void signal_deal(int sig) {if(sig == SIGINT)printf("%s\n", "crtl+c dectected!"); }int main(int argc, char const* argv[]) {signal(SIGINT, signal_deal);signal(SIGQUIT, signal_deal);for(;;);return 0; }

    總結

    以上是生活随笔為你收集整理的进程间通信--信号(SIG)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。