이미 실행 중인 prog1에 "&& prog2"를 추가할 수 있나요?

이미 실행 중인 prog1에 "&& prog2"를 추가할 수 있나요?

&&;대부분의 쉘은 어떤 방식으로든 명령 실행을 연결하는 기능을 제공합니다 . 그러나 명령이 이미 실행 중인 경우에도 첫 번째 명령의 결과에 따라 실행될 다른 명령을 추가할 수 있습니까?

도망쳤다고 했어

$ /bin/myprog
some output...

하지만 난 정말 그것을 원해요 /bin/myprog && /usr/bin/mycleanup. myprog너무 많은 시간이 낭비되기 때문에 모든 것을 종료하고 다시 시작할 수는 없습니다 . 나는 그것을 Ctrl+ 할 수 있고 / 필요하다면 . 이를 통해 다른 명령을 연결할 수 있습니까?Zfgbg

나는 bash에 가장 관심이 있지만 모든 일반적인 쉘에 대한 답변을 환영합니다!

답변1

현재 있는 동일한 셸에서 다음 명령을 사용하여 이 작업을 수행할 수 있습니다 wait.

$ sleep 30 &
[1] 17440

$ wait 17440 && echo hi

...30 seconds later...
[1]+  Done                    sleep 30
hi

Bash 매뉴얼 페이지에서

wait [n ...]
     Wait for each specified process and return its termination status. Each n 
     may be a process ID or a job specification; if a job spec is given,  all 
     processes  in that job's pipeline are waited for.  If n is not given, all 
     currently active child processes are waited for, and the return status is 
     zero.  If n specifies a non-existent process or job, the return status is 
     127.  Otherwise, the return status is the exit status of the last process 
     or job waited for.

답변2

fg재개된 프로그램의 종료 코드를 반환하고 반환합니다. 따라서 를 사용하여 프로그램을 일시 중지한 ^Z다음 fg && ...을 사용하여 다시 시작할 수 있습니다.

$ /bin/myprog
some output...
^Z
[1]+ Stopped              /bin/myprog
$ fg && /usr/bin/mycleanup

답변3

요청한 내용이 가능한지 확실하지 않지만 프로그램을 시작한 셸이 아직 있는 경우 언제든지 $?마지막 프로세스의 종료 상태를 확인할 수 있습니다.

$ /bin/myprog
some output...
$ if [ $? -ne 0 ];then echo "non-zero exit status";else echo "0 exit status";fi

답변4

작업이 포그라운드에 있는 경우 이러한 명령은 모두 예상한 것과 동일한 동작을 갖습니다.

[ $? -eq 0 ] && prog2
(( $? )) || prog2

참고: $?에는 실행 중인 프로그램이 종료될 때 반환 상태가 포함됩니다.

이는 처음에 명령을 입력하면 쉘이 수행할 작업을 명시적으로 나타냅니다.

prog1 && prog2

첫 번째 명령을 읽지 않고 stdin포그라운드에서 실행 중인 경우 첫 번째 명령이 실행되는 동안 새 명령을 입력할 수 있습니다. 첫 번째 명령이 실행되면 쉘은 이를 읽고 실행합니다. 명령이 백그라운드에서 실행되는 경우 stdin.

편집: 작업을 백그라운드에 두고 명령을 사용하는 것도 가능합니다 WAIT. 백그라운드에서 다른 작업도 실행 중이라면 주의해야 합니다. 명령이 WAIT대기된 작업의 상태를 반환하려면 작업 사양이 필요합니다 .

관련 정보