기본적으로 ‘0’은 어떤 신호를 나타내며, 여기서 1부터 시작하는 신호 번호가 표시 되기 때문 입니다.
답변
0
주어진 신호 를 전송하면 주어진 PID
프로세스 PID
가 실행 중인지 확인하고 신호를 보낼 수있는 권한이 있습니다.
자세한 내용은 다음 맨 페이지를 참조하십시오.
죽이기 (1)
$ man 1 kill
...
If sig is 0, then no signal is sent, but error checking is still performed.
...
죽이기 (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 kill
데비안 기반 시스템 에서이 신호에 대한 유일한 언급은 다음과 같습니다 .
특히 유용한 신호는 HUP, INT, KILL, STOP, CONT 및 0을 포함합니다.
특히 신호가 무엇인지 모르는 경우 특히 도움이되지 않습니다. 또한의 출력에 의해 나열 kill -l
되지 않으므로 이미 알고 있지 않으면 알 수 없습니다.
문서화 된 곳
데비안과 우분투 시스템에서 다음과 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: $?"
답변
이 명령은 $ pid의 PID가있는 프로세스가 살아 있는지 확인합니다.
답변
Kill -0 $ pid는 pid가있는 프로세스가 존재하는지 여부를 확인하는 것입니다.
‘kill -0 $ pid’를 사용하여 프로세스 존재를 확인하는 동안주의하십시오.
-
원하는 프로세스가 종료되면 해당 pid는 새로 작성된 다른 프로세스에 할당 될 수 있습니다. (따라서 특정 프로세스가 살아 있는지 여부를 확신 할 수 없습니다)
-
좀비 프로세스의 경우, 부모가 대기하기를 기다리는 자녀가 있습니다. 여기에서 $ pid를 유지하고 해당 프로세스가 실행되고 있지 않은 동안 긍정적 인 결과를 제공합니다.
답변
$ pid로 실행중인 프로세스가 활성 상태인지 여부를 확인하는 데 사용되는 -0 $ pid를 종료하십시오. 그러나 프로세스가 종료되고 새 프로세스가 실행되면 프로세스 ID를 다시 할당 할 수 있으므로 까다로울 수 있습니다. killall -0을 사용하여 특정 프로세스가 실행 중인지 여부를 알 수 있습니다.
답변
EXIT
신호를 보내 거나 0
프로세스에 보내면 :
- 프로세스가 있는지 확인하십시오.
- 프로세스 (PID, PGID 등 …)에서 다양한 오류 검사를 수행하십시오.
stdout
성공 하면 출력을 보내지 않습니다 .- 잘못된 것이
stderr
있으면 오류 메시지를 보내십시오 . - 프로세스가 소진 된 경우 (예 : 좀비) 오 탐지를 제공합니다.
보다 명확하게 쉘 스크립트에 유용한 기능은 다음과 같습니다.
function isProcess ()
{
kill -s EXIT $1 2> /dev/null
}
이것은 stdout
성공하면 텍스트를 반환하지 않지만 stderr
실패 하면 오류 메시지를 반환 하지만 오류 메시지를 (으 /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 $?
}
답변
