일련의 계산 집약적인 작업을 병렬로 실행해야 합니다. 제가 하려는 것은 실행 중인 작업에 해당하는 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=