자주 묻는 질문은 다음과 같습니다.
- 수퍼유저: 루프: 프로그램을 시작하고 시간 초과 후 종료
- SO: Bash에서 지정된 시간 초과 후 하위 프로세스를 종료하는 방법은 무엇입니까?
- SO: Bash에서 시간 초과가 있는 프로세스를 실행하는 방법은 무엇입니까?
이번에는 반전을 더했습니다. 에서 이 작업을 수행해야 합니다 zsh
. 또한 해결책은 다음과 같습니다.
- 침묵을 유지해야 합니다(예: 작업 제어 메시지 없음).
zsh
이식 가능해야 합니다(즉, 가능한 한 순수에 가깝습니다. 그렇지 않다고 가정coreutils
).- 정확해야합니다 (의견 참조)
- GNU처럼 행동해야 합니다
timeout
정확성에 관하여:
프로세스를 시작하고 잠시 기다린 다음 PID를 종료하는 것은 잘못된 것입니다. 시간 초과가 기록되거나 시스템에 PID가 부족해지면 타이밍을 맞춘 프로세스가 종료되고 나중에 동일한 PID를 사용하여 새 프로세스가 시작될 수 있으므로 이는 잘못된 것입니다. 실제로 이런 일은 거의 발생하지 않지만 프로세스가 종료된 시기를 추적하고 아직 종료되지 않은 경우에만 종료하는 더 명확한 방법이 있다면 좋을 것입니다.
답변1
제가 가장 먼저 생각한 것은 프로세스 생성 후 PID를 얻고 zstat
도구( 참조 man zshmodules
)를 사용하여 프로세스 타임스탬프(예: )를 얻은 다음 필요한 시간 이후에 zstat '+mtime' /proc/PID
주어진 타임스탬프가 /proc/PID
변경되지 않았는지 확인하는 것이었습니다. 그렇다면 작업을 종료하십시오. .