2015-10-20 81 views
2

我讀了關於信號,我知道如何從命令行發送信號到進程。只要做到發送信號從命令行處理

ps -C executable 

知道進程的PID,然後

kill -s signal pid(number) 

不過,我想找到一個更具交互性和通用的方式,如果能夠做到這一點。

我想從命令行向特定進程發送信號。我想不需要打印我想要發送的進程的PID,而是使用代碼瞭解應該發送哪個進程的方式。

除此之外,我想了解kill命令的功能。

  • 它是否會殺死信號的過程?
  • 它會殺死它被調用的進程嗎?
  • 如果它殺死一個進程,這意味着它類似於做exit(0),或者該過程在信號被髮回後是否恢復?
+0

那麼你希望*發送信號的形式是什麼?你可以通過一個例子來指定它嗎? –

+0

@EugeneSh。我會說在代碼中運行一個函數的命令是完美的。我可以創建一個函數來發送信號,而不會出現問題。我仍然想知道kill儘管 –

回答

6

據我瞭解你的問題,你想通過它的名字而不是它的PID來表示一個進程的信號。這可通過兩個命令結合來實現:

kill -s signal $(ps -C executable) 


是否殺死進程的信號?

kill可以殺死。它不一定。

man kill

命令kill發送指定信號,以指定 過程 或過程組。

這意味着,kill命令用於**發送任何信號。

如果它殺死的過程就意味着它類似於做exit(0),或 沒有信號後處理簡歷發送回?

here

SIGKILL該信號用於導致立即程序終止。它不能被處理或忽略,因此總是致命的。這是 也不可能阻止這個信號。

如果進程收到SIGKILL信號,它會立即終止(沒有析構函數被調用,沒有完成清理)。唯一不終止的進程是不可中斷的進程。


發現Linux上可用信號的完整列表here

+0

有什麼作用,所以我可以在沒有問題的情況下使用kill,並且它不會暫停或終止任何進程,只要我不使用SIGKILL信號? –

+0

然而,我有3個過程,所以我認爲你的答案建議會將信號發送給它們中的所有3個,而不是1個具體的 –

+0

@AndréAlmeida'kill'只發送信號。還有其他的信號,比如'SIGSTOP'或'SIGTERM',它們停止/終止程序。您需要查看每個信號的功能,以確定它的功能。 – Downvoter

0

我想從命令行發送信號到特定的進程。我想不需要打印我想要發送的進程的PID,而是使用代碼瞭解應該發送哪個進程的方式。

killall命令滿足這些標準,如果你有它可用。它允許您指定進程(es)根據其名稱發出信號。以下所有意見同樣適用於通過killall傳遞信號並通過kill傳遞信號的效果。

除此之外,我想了解kill命令的功能。

它會殺死信號的過程嗎?

它傳遞指定的信號。而已。它可以提供的一些信號將會導致殺死進程。

它會殺死它被調用的進程嗎?

它僅向您指定的過程傳遞信號。

如果它殺死了一個進程,這意味着它類似於退出(0),或者在信號被髮送回來後進程恢復嗎?

進程可以處理一些信號而不終止。當進程收到其中一個信號時,會發生什麼情況取決於進程。如果一個進程沒有爲一個信號提供一個處理程序,而這個信號的默認行爲是終止該進程,那麼這個進程就會死亡,永遠不會恢復。效果有點像調用exit()函數或從main()返回,但終止是突然的,沒有調用退出處理程序等。