programing

셸 스크립트의 kill -0 $pid는 무엇을 합니까?

i4 2023. 4. 11. 21:40
반응형

셸 스크립트의 kill -0 $pid는 무엇을 합니까?

기본적으로 '0'은 어떤 신호를 의미합니까? 왜냐하면 여기 1부터 시작하는 시그널 번호가 있기 때문입니다.

신호 전송0일정한 범위 내에서PID지정된 프로세스를 사용하는지 여부만 확인합니다.PID가 실행 중이고 사용자에게 신호를 보낼 권한이 있습니다.

상세한 것에 대하여는, 다음의 메뉴얼을 참조해 주세요.

kill(1)
$ man 1 kill
...
If sig is 0, then no signal is sent, but error checking is still performed.
...
kill(2)
$ man 2 kill
...
If sig is 0, then no signal is sent, but error checking is still performed; this 
can be used to check for the existence of a process ID or process group ID.
...

좋은 질문입니다.왜냐하면...

...이 특별한 신호에 대한 문서를 찾기가 어려울 수 있습니다.다른 사람들의 말에도 불구하고 이 신호에 대한 유일한 언급은man 1 killDebian 기반 시스템에서는 다음과 같습니다.

특히 유용한 신호로는 HUP, INT, KILL, STOP, CONT 및 0이 있습니다.

특히 신호가 무엇을 하는지 아직 모르는 경우에는 도움이 되지 않습니다.또, 출력에는 표시되지 않습니다.kill -l미리 알고 있지 않으면 알 수 없습니다.

문서화된 검색처

Debian 및 Ubuntu 시스템에서 출력은man 2 kill부분적으로는 다음과 같습니다.

sig가 0일 경우 신호는 전송되지 않지만 오류 체크는 계속 실행됩니다.이것에 의해, 프로세스 ID 또는 프로세스 그룹 ID 의 존재를 체크할 수 있습니다.

장점

사용할 수 있습니다.kill -0프로세스가 실행 중인지 여부를 확인합니다.예를 들어 보겠습니다.

# Kill the process if it exists and accepts signals from
# the current user.
sleep 60 &
pid=$!
kill -0 $pid && kill $pid

# Check if a PID exists. When missing, this should result
# in output similar to:
#    bash: kill: (6228) - No such process
#    Exit status: 1
kill -0 $pid; echo "Exit status: $?"

를 사용할 수도 있습니다.kill -0현재 사용자에게 지정된 프로세스를 시그널링할 수 있는 권한이 있는지 여부를 확인합니다.예를 들어 다음과 같습니다.

# See if you have permission to signal the process. If not,
# this should result in output similar to:
#     bash: kill: (15764) - Operation not permitted
#     Exit status: 1
sudo sleep 60 &
kill -0 $!; echo "Exit status: $?"

kill -0 $pid는 프로세스 ID(pid)를 가진 프로세스가 존재하는지 여부를 확인하는 것입니다.

주의해서 사용하세요kill -0 $pid프로세스 유무를 확인하다

  1. 의도한 프로세스가 종료되면 그 pid를 새로 생성된 다른 프로세스에 할당할 수 있습니다.(따라서 특정 프로세스가 활성 상태인지 아닌지 확신할 수 없습니다.)

  2. 좀비 프로세스의 경우 부모가 대기 호출하기를 기다리는 자녀가 있습니다.여기서 $pid를 유지하고 프로세스가 실행되지 않는 동안 긍정적인 결과를 얻을 수 있습니다.

이 명령어는 PID가 $pid인 프로세스가 활성 상태인지 확인합니다.

송신하다EXIT신호, 또는0다음과 같은 작업을 수행합니다.

  1. 프로세스의 존재를 확인합니다.
  2. 프로세스(PID, PGID 등)에서 다양한 오류 체크를 수행합니다.
  3. 에 출력을 송신하지 않습니다.stdout성공하자마자
  4. 에러 메시지를 송신하다stderr뭔가 잘못됐다면요
  5. 프로세스가 없어진 경우(즉, 좀비) 잘못된 긍정 결과를 제공합니다.

보다 구체적으로 말하면 셸 스크립트에 도움이 되는 기능은 다음과 같습니다.

function isProcess ()
{
    kill -s EXIT $1 2> /dev/null
}

.stdoutstderr 에러 메세지로 하고 ./dev/null를 참조해 주세요.

폐기/좀비 프로세스 상태가 우려되는 경우ps이면)과 사용하는 것이 .--no-headers환합니니다다

#!/bin/ksh

function trim ()
{
    echo -n "$1" | tr -d [:space:]
}

function getProcessStatus ()
{
    trim $(ps -p $1 -o stat --no-headers)
}

function isZombie ()
{
    typeset processStatus=$(getProcessStatus $1)

    [[ "$processStatus" == "Z" ]]
    return $?
}

kill -0 $pid는, 「이행」으로되고 있는 프로세스가, 「이행」으로 동작하고 있지 하기 위해서 사용합니다.$pid생사여부를 알 수 있습니다.그러나 프로세스가 종료되고 새로운 프로세스가 실행되면 프로세스 ID를 재할당할 수 있기 때문에 이는 까다로울 수 있습니다.

killall -0 <process name>특정 프로세스가 실행 중인지 아닌지에 대한 정보를 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/11012527/what-does-kill-0-pid-in-a-shell-script-do

반응형