Bash에서 PID와 작업 사양을 사용하는 데 중복되는 부분이 있나요?
내 스크립트에서는 .을 사용하여 명령의 PID를 변수에 저장합니다 $!
. 그런 다음 disown
PID를 사용하여 호출하여 셸의 활성 작업 목록에서 작업을 제거합니다. 나중에 스크립트는 kill
상황에 따라 프로세스를 종료할 수도 있고 종료하지 않을 수도 있습니다. 이것의 목적은 보기 흉한 "작업이 종료되었습니다"라는 메시지가 터미널에 나타나지 않고 내 스크립트의 깔끔한 출력이 보기 흉하게 보이도록 하기 위한 것입니다.
잘 작동하지만 PID와 jobspec의 차이점에 대해 혼란스러워요.
$! - the PID of the most recent background command.
disown [-ar] [-h] [jobspec ...]
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec]
disown
작업 사양이 필요하지만 PID를 제공합니다. jobspec이 유효한 작업을 지정하지 않는 한 0이 반환됨을 man bash
나타냅니다 . disown
PID를 지정하면 0이 반환되므로 모든 것이 괜찮아 보입니다.
jobspec에 대한 검색에는 man bash
PID가 일반적으로 jobspec 대신 사용될 수 있다는 내용이 언급되어 있지 않으며 해당 disown
항목에는 jobspec 대신 PID를 사용할 수 있다는 내용이 나와 있지 않습니다.
PID와 jobspec은 동일한 것이 아니지만 사용법이 겹치는 부분이 있나요? 그렇지 않다면 왜 내 코드가 작동합니까? disown
작업 사양 대신 PID를 가져와 이를 문서화하지 않는 것만큼 간단 합니까 man bash
?
감사해요.
편집하다
choroba의 말이 맞습니다. disown
jobspec 대신 PID를 사용할 수 있는 것은 사실인 것 같습니다 disown
. 이제 GNU Bash의 두 가지 다른 버전을 테스트하여 이를 확인했습니다.
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu) [On Linux Mint]
GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu) [On Debian]
GNU는 (내가 아는 한) 문서화하지 않지만 Linux 문서화 프로젝트는 세 번째 문장으로 문서화합니다.작업 제어 명령페이지.
나는 GNU Bash 매뉴얼 페이지의 관리자에게 disown
쉘 내장 명령 섹션의 항목 변경을 제안하는 이메일을 보냈습니다.
From: disown [-ar] [-h] [jobspec ...]
To: disown [-ar] [-h] [jobspec | pid] ...
이제 그는 오류를 확인하고 변경했습니다.
답변1
이것은 문서화되지 않은 기능인 것 같습니다 disown
. Bash는 PID를 작업 사양으로 착각할 수 없습니다. 작업 사양은 항상 %
.