프로세스를 백그라운드에 두고 하나의 명령으로 작업을 수행합니다.

프로세스를 백그라운드에 두고 하나의 명령으로 작업을 수행합니다.

아마 그냥 스크립트를 사용하는 것이 더 쉬울 텐데 왜 명령으로는 할 수 없는지 궁금합니다. 내가 지금까지 시도한 것 :

$ (ls >/dev/null &) && echo $!
3135
$ (ls >/dev/null &) ; echo $! #bad idea, but if that worked, I could just add `sleep 0.1`
3135
$ ls >/dev/null & ; echo $!
bash: syntax error near unexpected token `;'
$ `ls >/dev/null &` && echo $!
3135
$ `ls >/dev/null &` ; echo $!
3135

3135숫자는 이 변수를 저장한 마지막 백그라운드 프로세스의 PID $!이며 변경되지 않습니다.(저는 또한 Konsole을 사용하고 프로세스를 성공적으로 배경화하기 위해 다음과 같은 내용을 인쇄합니다 [1] PID). 아아, 실행된 명령 중 어느 것도 프로세스를 백그라운드로 보내지 않았습니다.

답변1

이렇게 하면 원하는 작업이 수행됩니다.

$ ls > /dev/null & echo $!

다양한 방법으로 백그라운드 명령을 하위 프로세스에 강제로 적용하므로 첫 번째 셸에는 백그라운드 프로세스가 없으므로 $!업데이트되지 않습니다.

이제 동일한 셸에서 백그라운드 프로세스가 시작되어 echo $!원하는 작업을 수행할 수 있습니다.

관련 정보