簡體   English   中英

linux kill命令會終止子進程嗎?

[英]does linux kill command terminate child processes?

當您在父進程上調用“ kill”時,子進程隨后是否也會被殺死?

不,不是自動的。

通常,當父母被殺死時,會向孩子發送HUP信號。 至少當父級是外殼時,這是正確的。 我不確定每當孩子被fork()時是否免費提供。

但這可以被克服,例如,如果父級是一個外殼並且子級是使用nohup child&啟動的,或者子級本身聲明它將忽略HUP信號,那么這是可以克服的。

男子2殺

 int kill(pid_t pid, int sig); 

如果pid大於0,則將sig發送到其進程ID等於pid的進程。

如果pid為負,但不是-1,則sig應發送給所有進程組ID等於pid的絕對值的進程(不包括未指定的系統進程集),並且該進程有權發送信號。

除非調用setpgid或類似函數,否則子進程與其父進程在同一個進程組中。 例如,由外殼啟動的作業與外殼本身屬於同一進程組。

因此, kill -HUP $$SIGHUP發送到您的shell,而kill -HUP -$$SIGHUP發送到您當前會話中的所有進程,包括shell的子進程。

這個bash腳本將殺死自己和子進程……nohup的反面。

#!/bin/bash

read pid cmd state ppid pgrp session tty_nr tpgid rest < /proc/self/stat
trap "kill -TERM -$pgrp; exit" EXIT TERM KILL SIGKILL

# run the program given on args
"$@"

exit $?

有人知道是否有這樣的內置功能嗎?

是的,它會的; 使用kill -1http : //unixhelp.ed.ac.uk/shell/jobz5.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM