프로세스 kill 에 대하여

yi0218의 이미지

부모 프로세스가 여러개의 차일드 프로세스 내지는 다수의 스레드를 생성할때
생성한 프로세스(스레드)가 경우에 따라서 데드락 상태가 되는 경우가 있습니다.

이때 부모프로세스에게 KILL -9 시그널을 보내면 모든 차일드 프로세스와 함께
종료되는 것이 정상인데(본인이 알기론...), 종료 되지 아니하고 부모프로세스가
좀비로 남고 자식은 계속 데드락 상태로 남아있게 되는 경우가 종종 있습니다.
결국 직접 차일드 프로세스를 찾아 kill -9 시그널을 보내야 되는데,

부모에게(부모가 생성한 프로세스와 함께) kill -9 시그널을 재귀적으로 모든 자식에게 보내는 방법이 있을런지... 알고 싶습니다.

bw001730의 이미지

부모가 자식을 생성할때 자식의 PID를 알수 있습니다.
fork 할때 이때 딱 한번만 알수 있습니다.
따라서 부모가 자식낳을때(fork할때)
자식 프로세스의 PID를 저장해두었다가
나중에 루프돌면서 kill 해주시면 될것 같네요

또 wait 모든 자식넘들이 종료되기를 기다릴수도 있구요

yi0218의 이미지

부모가 자식을 생성할때 하나의 프로세스를 생성하지만
이 자식프로세스가 또다른 자식프로세스(스레드)를 만들기 때문에
자식의 PID는 알 수 있지만 손자 이상의 PID는 알 수 없으며,
자식 프로세스가 외부프로그램을 fork해서 수행하게 되면
이 프로세스의 이름도 알 수 없습니다.
이때는 이 외부 프로그램이 실로 몇개의 프로세스나 스레드를 만드는지
알 수 없으므로 더 곤란 하게 만듭니다.
그리고 자식 프로세스가 데드락 상태라면 wait 하면서 기다릴 수 없으므로
무한히 기다리는 현상이 발생하게 되는것 입니다.

그러므로, 프로세스 트리 구조로 볼 때 부모 프로세스로 부터
모든 자식 프로세스를 재귀적으로 KILL 할 수 있는 방법을 찾고 있습니다.

jinoos의 이미지

kill -9 는 SIGKILL 로 catchable 되거나 ignorable 되지 않습니다. 고로 다른 시그널은 블락되고 SIGKILL 만 부모에게 먹히는 상황이라면 부모는 자식에게 SIGKILL을 전달하지 못하고 그자리에서 죽어버립니다. 한마디로 부모와 자식을 전부 SIGKILL 할수 없습니다.

만약 자식만 SIGKILL 시그널로 보내고 부모는 SIGINT, SIGQUIT 정도로 한다면 얘기가 됩니다.

다른분들의 답변처럼 자식의 PID를 저장하고 시그널핸들에서 자식들에게 개별적으로 시그널을 보내는 루틴으로 처리, 다음 부모 자살? 하기... 뭐 이런순이죠.

정 안되는 상황이라면 스크립트를 작성해서 같은 이름의 모든프로세스(부모,자식) 에게 kill -9 를 보내는 방법도 있겠죠.. perl 같은것으로 짠다면 간단하게 될껍니다.

목적을 찾아서... jiNoos

익명 사용자의 이미지

그냥 제 생각입니다만.. 시그널 핸들러를 사용하는 방법은 안될지..

jinoos의 이미지

yi0218 wrote:
부모가 자식을 생성할때 하나의 프로세스를 생성하지만
이 자식프로세스가 또다른 자식프로세스(스레드)를 만들기 때문에
자식의 PID는 알 수 있지만 손자 이상의 PID는 알 수 없으며,
자식 프로세스가 외부프로그램을 fork해서 수행하게 되면
이 프로세스의 이름도 알 수 없습니다.
이때는 이 외부 프로그램이 실로 몇개의 프로세스나 스레드를 만드는지
알 수 없으므로 더 곤란 하게 만듭니다.
그리고 자식 프로세스가 데드락 상태라면 wait 하면서 기다릴 수 없으므로
무한히 기다리는 현상이 발생하게 되는것 입니다.

그러므로, 프로세스 트리 구조로 볼 때 부모 프로세스로 부터
모든 자식 프로세스를 재귀적으로 KILL 할 수 있는 방법을 찾고 있습니다.

재귀적으로 KILL 할 필요가 있을까 하는데 의문이 듭니다. 어차피 KILL -9 는 처리 되지 않고 즉사! 하기에 순서가 그리 중요하지 않다면.. 급조해서..

#!/bin/sh
PLIST=`ps -xa | grep $1 | awk "{print \\$1}"`

for EPLIST in $PLIST; do
    kill -9 $EPLIST
done

$ pkill process_name

목적을 찾아서... jiNoos

vuccell의 이미지

재귀적으로 생성할때마다 reculsive한 구조로 PID를 저장하세요.. 위의 Jinoos님 말씀대로 kill PID로 SIGINT를 발생시키고, 이때 코딩내에서 reculive하게 루프돌면서 lastorder방식으로 process를 kill하시면 될듯

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.