事實上,當我們執行 Process 時,按下 Ctrl-C、Ctrl-Z 等等,其實也算是另外一種對 Process 送出 Signal 的動作,例如在 Linux 裡 Ctrl-Z 是送出 SIGTSTP 的 Signal,預設是將 Process 進行暫停的動作,而 Ctrl-C 則是送出 SIGINT 的 Signal,其意義是鍵盤對 Process 送出 Interrupt 的動作,預設是停止目前前景的 Process。
在 Signal manual 有更詳細所有的 Signal 介紹
另外,在處裡關於 Signal 的部分,預設在 Linux 都具有原本預設的處理方法,但其實我們是可以 Overwrite 改成我們想要的處理方式。
C API
http://man7.org/linux/man-pages/man2/signal.2.html
首先需要引入 signal.h 這個 header file,然後建立一個 signal handler 帶有 signal number 的參數,最後在 main function 利用 signal function 掛上 signal handler,一旦 process 發生了你所指定的 signal,便會導到你自己的 handler。
首先需要引入 signal.h 這個 header file,然後建立一個 signal handler 帶有 signal number 的參數,最後在 main function 利用 signal function 掛上 signal handler,一旦 process 發生了你所指定的 signal,便會導到你自己的 handler。
#include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);P.S. 如果想要改成原來預設 Linux 的 Default Handler,可以將 handler 改成 SIG_DFL,如果要忽略這一個 Signal,則可以改成 SIG_IGN。
其中 SIGKILL 和 SIGSTOP 是不能被更改和捕抓的,意思就是你不能 Overwrite,就算 Overwrite 了,他也不會理你。
沒有留言:
張貼留言