백그라운드에서 실행된 마지막 두 명령의 pid를 가져오고 일부 작업을 수행합니다.

백그라운드에서 실행된 마지막 두 명령의 pid를 가져오고 일부 작업을 수행합니다.

나는 bash에서 이것을 썼다:

#!/bin/bash

    eval "(a command) &"
    pid1=$!

    eval "(while kill -0 $pid1; do .... ; done) &"  #It creates file.txt after few seconds
    pid2=$!

    if [ -s /tmp/file.txt ]; then
             for line in $(cat /tmp/file.txt)
                 do
                  sth
                 done

Bash 스크립트를 사용한 논리: pid1과 pid2의 값이 정확합니까?

이 스크립트가 올바르게 실행됩니까?

답변1

나는 `eval "(...) &" 구문이 필요하다고 생각하지 않습니다. 이렇게 하세요:

cmd1 &
pid1=$!

cmd2 &
pid2=$!

하지만 그 외에는 당신의 접근 방식이 꽤 좋아 보입니다.

$ more ex.bash 
#!/bin/bash

sleep 10 &
pid1=$!

sleep 10 &
pid2=$!

echo "ID1: $pid1 --- ID2: $pid2"

이제 실행하면 다음과 같습니다.

$ ./ex.bash 
ID1: 27866 --- ID2: 27867

이것이 올바른지 확인할 수 있습니다.

$ pgrep -l sleep
27866 sleep
27867 sleep

관련 정보