다음과 같은 내용이 있지만 $!
이 echo 명령을 수행하기 전에 덮어 쓰기가 걱정됩니다 (이 메시지는 아마도 몇 밀리 초입니다). 너희들은 어떻게 이것에 관해가는 것이 좋습니다?파일에 분기 된 프로세스의 ID를 저장하십시오.
sleep 100 & >/dev/null ; echo $! >sleep.pid
다음과 같은 내용이 있지만 $!
이 echo 명령을 수행하기 전에 덮어 쓰기가 걱정됩니다 (이 메시지는 아마도 몇 밀리 초입니다). 너희들은 어떻게 이것에 관해가는 것이 좋습니다?파일에 분기 된 프로세스의 ID를 저장하십시오.
sleep 100 & >/dev/null ; echo $! >sleep.pid
$!
는 현재 쉘, 전체 상자의 가장 최근의하지에서 가장 최근의 백그라운드 프로세스 의 PID입니다. 그것은 실제 가치가 없다는 것을 결코 알 수 없기 때문에 실용적이지 않을 것입니다.
질문에 표시되는 코드 은 잘못된 PID을 반환 할 수 없습니다. sleep
과 echo
사이에는 다른 백그라운드 프로세스가 없습니다.
나는 그것을 잠에 가져온다. 그것은 단지 예일 뿐이다. 나는 몇몇 동시성을 시뮬레이트 해 보았지만 올바른 프로세스 ID를 가지고 있는지 확신 할 수 없었기 때문에 이것에 대해 논의하는 것이 의미가 없다고 생각했다. 위에서 제시했듯이 $를 가질 수있는 유일한 방법이다! 마지막 pid를 유지하면 첫 번째 명령에서 포크가되지 않습니다. 나는 지금 이것을 가지고 살 수있다 =) – Abdo
_ "$!를 유지하는 유일한 방법은 첫 번째 명령에서 포크하지 말라는 것이다"_ 넌센스, 명령을 실행 한 후 다음 명령으로'$!'를 그냥 저장한다. 배경 명령. 나는 문제가 무엇인지 이해하지 못한다. 이것은 정말로 간단하다. –
내 이전 코멘트의 핵심 부분을 놓쳤다 고 생각합니다 : _ "스크립트에서 다른 ** 명령어를 포크하지 마라!"_ 배경 명령을 실행하면 바로 다음에'$!'가 올바른 값을 가지게됩니다. 그래서 즉시 사용하십시오. 백그라운드에서 다른 프로세스를 실행하면'$!'를 저장 한 상태로 그 프로세스가 끝난 후에'$! '의 값은 변경되지만 이전 프로세스는 이미 저장되어 있습니다. 이것은 정말로 간단합니다. –
"$!"덮어 쓰기 란 무엇을 의미합니까? 'sleep'과'echo' 사이에 명령이 없으므로 무엇을 덮어 씁니까? –
$! 가장 최근의 배경 명령의 pid입니다 http://stackoverflow.com/a/5163260/226255 .. 수면의 "발사"와 에코가 시작되는 사이 (아마도 밀리 초일 것입니다) 명령은 갈래 지? – Abdo
당신의 스크립트에서 다른 명령을 포크하지 말아야합니다. –