The following pids have special meanings:
-1 If superuser, broadcast the signal to all processes; otherwise
broadcast to all processes belonging to the user.
Some of the more commonly used signals:
1 HUP (hang up)
2 INT (interrupt)
3 QUIT (quit)
6 ABRT (abort)
9 KILL (non-catchable, non-ignorable kill)
14 ALRM (alarm clock)
15 TERM (software termination signal)
보통 kill 을 하면 SIGTERM 이 발생 하는 것으로 알고 있습니다.
그러나 -9 옵션을 붙이면 SIGTERM 이 발생하지 않는것 같은데요...
-9 옵션을 사용해서 kill을 보냈을 때 어떤 signal 이 발생하는지 궁금합니다.
:shock:
프로세스간에 정보를 주고받는 방법은 여러가지를 생각해 볼 수 있습니다.
그중, signal/wait는 프리미티브라고 불릴정도로 기본적이며,
기초적인 것입니다. 마치 수학의 사칙연산(+,-,*,/)라고 봐야겠지요.
프로세스간에 정보를 주고받는 방법으로, 어떤 메시지를 고려해 볼 수 있습니다만,
단지 번호를 지정해서 주고 받는 기초적인 것이 유닉스의 signal/wait입니다.
이때, signal을 보내는 프로그램을 만들어 놓은것이 kill이지요.
kill이라는 단어의 의미와는 사뭇차이가 있습니다만, 이 신호를 받으면 이유가
무엇이고, 이에대한 기본처리는 이렇게 한다라는 규약이 필요한데요.
운영체제가 기본적으로 처리해주기도 합니다만, 프로그래머가 해당
시그널이 자신이 수행한 프로세스내에 도달하면 어찌 할지를 프로그램으로
작성할 수 있습니다. 이를 시그널 핸들러라고 합니다.
시그널이 발생하는 원인은 다양하고(앞분의 답변참조), 그에 대한 처리는
프로그래머가 핸들러를 달아 달리 수행할 수 있습니다.
그러나, 9번 시그널은 프로그래머가 달리 처리할 수 없고(시그널을 잡거나, 핸들링불가) 무조건 그 시그널을 수신한 프로세스를 종료시키는 시그널입니다.
* 여담
구한말에 BBS를 제작했던적이 있는데, 다수개의 모뎀중 특정 모뎀에 문제가 있어,
해당 연결을 강제로 죽이려한적이 있습니다.(당근으로 kill -9 )
그런데, 안죽더라고요 :( 수퍼유저로 변신해서 다시해도 안죽고,...... :(
결국 죽이는데 성공했는데 방법은 해당 포트의 디바이스 파일을 삭제하 고:(
그 프로세스를 죽이니 죽더군요 :( 하여간 여담이었습니다.
참고로 그 플랫폼은 SCO유닉스였습니다.
SIGTERM만 프로세스를 죽이는게 아니고, 다른 시그널도 죽일 수 있습니다.
시그널에 대한 default핸들러가 죽도록 하게 하기 때문이지요.
시그널을 수신했을때, 죽지 않게 할 수 있는데, 핸들러에서 처리를 해주면 됩니다.그러나, 9번시그널은 손도 못대보는 시그널이지요.
man kill 쳐보니 The following pid
man kill 쳐보니
The following pids have special meanings:
-1 If superuser, broadcast the signal to all processes; otherwise
broadcast to all processes belonging to the user.
Some of the more commonly used signals:
1 HUP (hang up)
2 INT (interrupt)
3 QUIT (quit)
6 ABRT (abort)
9 KILL (non-catchable, non-ignorable kill)
14 ALRM (alarm clock)
15 TERM (software termination signal)
이게 있더군여..
혹시나 도움이 될까 적어봤습니다.
존 레논이 생전에 했던 말처럼..
너의 목소리가 들려..
Let it be..
Signal 9번은 잡아낼수 없습니다.강제적인 성격을 가진 시그널이라
Signal 9번은 잡아낼수 없습니다.
강제적인 성격을 가진 시그널이라 할수 있겠네요.
kill option
kill -l 하시면 모든 시그널의 종류를 보실 수 있습니다.
... 63번 까지 있군요
그럼..
Re: [질문] kill -9 를 실행했을 때 발생하는 signal 은 무엇인
프로세스간에 정보를 주고받는 방법은 여러가지를 생각해 볼 수 있습니다.
그중, signal/wait는 프리미티브라고 불릴정도로 기본적이며,
기초적인 것입니다. 마치 수학의 사칙연산(+,-,*,/)라고 봐야겠지요.
프로세스간에 정보를 주고받는 방법으로, 어떤 메시지를 고려해 볼 수 있습니다만,
단지 번호를 지정해서 주고 받는 기초적인 것이 유닉스의 signal/wait입니다.
이때, signal을 보내는 프로그램을 만들어 놓은것이 kill이지요.
kill이라는 단어의 의미와는 사뭇차이가 있습니다만, 이 신호를 받으면 이유가
무엇이고, 이에대한 기본처리는 이렇게 한다라는 규약이 필요한데요.
운영체제가 기본적으로 처리해주기도 합니다만, 프로그래머가 해당
시그널이 자신이 수행한 프로세스내에 도달하면 어찌 할지를 프로그램으로
작성할 수 있습니다. 이를 시그널 핸들러라고 합니다.
시그널이 발생하는 원인은 다양하고(앞분의 답변참조), 그에 대한 처리는
프로그래머가 핸들러를 달아 달리 수행할 수 있습니다.
그러나, 9번 시그널은 프로그래머가 달리 처리할 수 없고(시그널을 잡거나, 핸들링불가) 무조건 그 시그널을 수신한 프로세스를 종료시키는 시그널입니다.
* 여담
구한말에 BBS를 제작했던적이 있는데, 다수개의 모뎀중 특정 모뎀에 문제가 있어,
해당 연결을 강제로 죽이려한적이 있습니다.(당근으로 kill -9 )
그런데, 안죽더라고요 :( 수퍼유저로 변신해서 다시해도 안죽고,...... :(
결국 죽이는데 성공했는데 방법은 해당 포트의 디바이스 파일을 삭제하 고:(
그 프로세스를 죽이니 죽더군요 :( 하여간 여담이었습니다.
참고로 그 플랫폼은 SCO유닉스였습니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
컹 죄송합니다.답변은 안하고 엄한 얘기만 했네요.SIGTERM
컹 죄송합니다.
답변은 안하고 엄한 얘기만 했네요.
SIGTERM만 프로세스를 죽이는게 아니고, 다른 시그널도 죽일 수 있습니다.
시그널에 대한 default핸들러가 죽도록 하게 하기 때문이지요.
시그널을 수신했을때, 죽지 않게 할 수 있는데, 핸들러에서 처리를 해주면 됩니다.그러나, 9번시그널은 손도 못대보는 시그널이지요.
시그널의 디폴트액션에 대해 검토해보시기 바랍니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기