부모 프로세스를 통해 자식 프로세스를 죽이는 방법은 무엇입니까?
다음을 사용하여 하위 프로세스를 만듭니다.fork()
하위 프로세스가 30초 이내에 실행을 완료할 수 없는 경우 상위 프로세스가 하위 프로세스를 어떻게 종료할 수 있습니까?하위 프로세스가 최대 30초까지 실행되도록 허용합니다.30초 이상 걸릴 경우 상위 프로세스에서 삭제됩니다.당신은 그것을 할 생각이 있습니까?
SIGTERM 또는 SIGKILL을 전송합니다.
http://en.wikipedia.org/wiki/SIGKILL
http://en.wikipedia.org/wiki/SIGTERM
SIGTERM은 공손하고 프로세스가 진행되기 전에 정리하도록 하는 반면, SIGKILL은 듣지 않을 때를 위한 것입니다 >:)
셸의 예(man 페이지: http://unixhelp.ed.ac.uk/CGI/man-cgi?kill )
킬 -9 pid
C에서 kill syscall을 사용하여 동일한 작업을 수행할 수 있습니다.
kill(pid, SIGKILL);
다음 man 페이지 참조: http://linux.die.net/man/2/kill
다음과 같은 방법을 사용해 보십시오.
#include <signal.h>
pid_t child_pid = -1 ; //Global
void kill_child(int sig)
{
kill(child_pid,SIGKILL);
}
int main(int argc, char *argv[])
{
signal(SIGALRM,(void (*)(int))kill_child);
child_pid = fork();
if (child_pid > 0) {
/*PARENT*/
alarm(30);
/*
* Do parent's tasks here.
*/
wait(NULL);
}
else if (child_pid == 0){
/*CHILD*/
/*
* Do child's tasks here.
*/
}
}
상위 프로세스에서 fork()의 반환 값은 하위 프로세스의 프로세스 ID입니다.하위 프로세스를 종료해야 할 때를 대비하여 해당 값을 어딘가에 저장합니다.fork()는 하위 프로세스에서 0을 반환합니다.
자식 프로세스를 종료해야 할 경우, 포크()로 반환되는 프로세스 ID와 전달하고자 하는 신호(예: SIGTERM)로 kill(2) 기능을 사용합니다.
남아있는 좀비를 방지하기 위해 자식 프로세스에서 wait()를 호출하는 것을 기억하십시오.
언급URL : https://stackoverflow.com/questions/6501522/how-to-kill-a-child-process-by-the-parent-process
'programing' 카테고리의 다른 글
유형 스크립트 모듈 내에서 전역 유형(예: "창") 확장 (0) | 2023.07.01 |
---|---|
매핑되지 않은 자동 매핑 구성원을 찾았습니다. (0) | 2023.07.01 |
void를 반환하는 ASP.Net MVC 컨트롤러 작업 (0) | 2023.07.01 |
지난 n일 이내에 모든 문서 찾기 (0) | 2023.07.01 |
t-sql에서 'execute'를 사용하여 변수로 값을 설정하는 방법은 무엇입니까? (0) | 2023.07.01 |