參考
Linux中ctrl-c, ctrl-z, ctrl-d 區別
ctrl-d ( Terminate input, or exit shell ) 一個特殊的二進制值,表示 EOF,作用相當於在終端中輸入exit後回車;
ctrl-/ 發送 SIGQUIT 信號給前臺進程組中的所有進程,終止前臺進程並生成 core 文件;
ctrl-s 中斷控制檯輸出;
ctrl-q 恢復控制檯輸出;
ctrl-l 清屏。
Linux命令kill和signal
kill <pid>
: 發送SIGTERM信號到指定進程,如果進程沒有捕獲該信號,則進程終止。
kill -l
:列出所有信號名稱及數值。
kill -l <signame>
:顯示指定信號的數值。
kill -9 <pid>
:強制殺掉指定進程,無條件終止指定進程。
kill %<jobid>
:殺掉指定的任務(使用jobs命令可以列出)。
kill -QUIT <pid>
or kill -3 <pid>
:使得程序正常的退出。
基礎知識
- 使用
kill -l
命令查看信號種類
- Linux中的前臺進程與後臺進程區別:
LINUX後臺進程也叫守護進程(Daemon),是運行在後臺的一種特殊進程。它獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。 一般用作系統服務,可以用crontab提交(Linux crontab是用來定期執行程序的命令),編輯或者刪除相應的作業。 守護的意思就是不受終端控制。Linux的大多數服務器就是用守護進程實現的。比如,Internet服務器inetd,Web服務器httpd等。同時,守護進程完成許多系統任務。比如,作業規劃進程crond,打印進程lpd等。 - 下面是常用的信號:
HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(與STOP相反, fg/bg命令)
STOP 19 暫停(同 Ctrl + Z)
SIGINT信號
ctr+c觸發:(kill foreground process) 發送 SIGINT 信號給前臺進程組中的所有進程,強制終止程序的執行;(INT -> interrupt) -> 只能終止前臺進程組中的所有進程
SIGSTOP信號
ctrl+z觸發: ( suspend foreground process ) 發送 SIGSTOP 信號給前臺進程組中的所有進程,常用於掛起一個進程,而並非結束進程,用戶可以使用使用fg/bg操作恢復執行前臺或後臺的進程。
fg、bg讓你的進程在前後臺之間切換
在一個命令最後加&
,可以將這個命令放到後臺執行。如./build/Server &
jobs
指令:查看當前有多少在後臺運行的命令
fg
指令:將後臺中的命令調至前臺繼續運行
bg
指令:將一個在後臺暫停的命令,變成繼續執行
SIGTERM信號與SIGKILL信號
kill <PID>
發送SIGTERM信號到指定進程,如果進程沒有捕獲該信號,則進程終止。SIGTERM是程序結束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理。
Linux C實踐(1):不可忽略或捕捉的信號—SIGSTOP和SIGKILL
linux中的信號 SIGINT SIGTERM SIGKILL
SIGKILL:kill -9 <PID>
會發送這個信號,用來強制使進程立即結束。
SIGKILL是不能被捕獲的,程序收到這個信號後,一定會退出。這就是kill -9
一定能保證將程序殺死的原因。
示例1
前臺啓動服務器進程 -> ctrl+z掛起前臺的進程,使其進入後臺並暫停 -> bg將後臺中暫停的命令繼續執行 -> fg將後臺中的命令調至前臺繼續運行 -> ctrl+c結束前臺進程。
示例2
啓動服務器命令最後加&
,服務器在後臺執行 -> ctrl+c無法結束後臺的服務器進程 -> kill pid
發送SIGTERM信號,結束服務器進程。