셸 스크립트의 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 kill
Debian 기반 시스템에서는 다음과 같습니다.
특히 유용한 신호로는 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
프로세스 유무를 확인하다
의도한 프로세스가 종료되면 그 pid를 새로 생성된 다른 프로세스에 할당할 수 있습니다.(따라서 특정 프로세스가 활성 상태인지 아닌지 확신할 수 없습니다.)
좀비 프로세스의 경우 부모가 대기 호출하기를 기다리는 자녀가 있습니다.여기서 $pid를 유지하고 프로세스가 실행되지 않는 동안 긍정적인 결과를 얻을 수 있습니다.
이 명령어는 PID가 $pid인 프로세스가 활성 상태인지 확인합니다.
송신하다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 $?
}
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
'programing' 카테고리의 다른 글
PowerShell에서 출력을 $null로 리디렉션하지만 변수가 설정된 상태로 유지되도록 합니다. (0) | 2023.04.11 |
---|---|
curl 명령에 대한 데이터 URLencode 방법은 무엇입니까? (0) | 2023.04.11 |
Windows에서 . (도트) 접두사를 가진 파일을 수동으로 작성하려면 어떻게 해야 합니까?예를 들어 .htaccess 입니다. (0) | 2023.04.11 |
Bash 스크립트 – "/bin/bash^M: 잘못된 인터프리터:해당 파일 또는 디렉터리 없음" (0) | 2023.04.11 |
Git Stash를 한 번에 모두 삭제하려면 어떻게 해야 하나요? (0) | 2023.04.11 |