Bash는 ps를 사용하여 실행 중인 작업 목록을 업데이트합니다.

Bash는 ps를 사용하여 실행 중인 작업 목록을 업데이트합니다.

일련의 계산 집약적인 작업을 병렬로 실행해야 합니다. 제가 하려는 것은 실행 중인 작업에 해당하는 pid 목록을 유지하고 실행 중인 작업 목록을 업데이트하는 것인데, ps명령 확장에 문제가 있습니다.

기본적으로 실행 중인 작업 목록이 있고 을 사용하고 싶습니다 ps. 목록은 공백으로 구분된 정수(pid) 문자열로 저장됩니다. 내가 하고 싶은 일의 예는 다음과 같습니다.

sleep 10 &
pid=$!
running="$running $pid"
sleep 20 &
pid=$!
running="$running $pid"
sleep 30 &
pid=$!
running="$running $pid"
sleep 40 &
pid=$!
running="$running $pid"
echo "Initial list of jobs"
echo "$running"
sleep 20
echo "Jobs still running after 20 seconds"
echo $(ps -p $running -o pid= | tr -s "\n" " ")

하지만 내가 얻는 건

Initial list of jobs 
 30815 30816 30817 30818
Jobs still running after 20 seconds
error: process ID list syntax error 
... bla bla bla ps usage...

답변1

바꾸다

 running="$running $pid" 

통과

 running="$running,$pid"

첫 번째 경우 ps가 호출됩니다.

ps -p 12 34 45 -o pid=

그리고 두 번째에는

ps -p 12,34,45 -o pid=

관련 정보