![Bash: 상위 PID와 독립적으로 명령을 실행하시겠습니까?](https://linux55.com/image/142246/Bash%3A%20%EC%83%81%EC%9C%84%20PID%EC%99%80%20%EB%8F%85%EB%A6%BD%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
다음 test.sh
스크립트를 실행하세요.
#!/bin/bash
sleep 15 & sleep 2000
그런 다음 View Running Processes 를 사용하여 $ ps auxfwww | grep -i [2]000 -B 10
다음 정보 11886
와 11887
PID를 얻습니다.
user 7070 0.0 0.0 4504 1444 ? Ss Nov15 0:00 \_ /bin/sh /etc/xdg/xfce4/xinitrc -- /etc/X11/xinit/xserverrc
user 7081 0.0 0.0 324540 14064 ? Sl Nov15 0:00 | \_ xfce4-session
user 7100 0.0 0.3 562128 62800 ? Sl Nov15 0:48 | \_ tilix
user 23644 0.0 0.0 31132 6136 pts/11 Ss 14:32 0:00 | | \_ /bin/bash
user 11884 0.0 0.0 20024 3044 pts/11 S+ 14:58 0:00 | | | \_ /bin/bash ./test.sh
user 11886 0.0 0.0 14776 700 pts/11 S+ 14:58 0:00 | | | \_ sleep 15
user 11887 0.0 0.0 14776 704 pts/11 S+ 14:58 0:00 | | | \_ sleep 2000
sleep 2000
상위 프로세스와 완전히 독립적으로 명령을 실행할 수 있습니까 ? 예를 들어:
user 7070 0.0 0.0 4504 1444 ? Ss Nov15 0:00 \_ /bin/sh /etc/xdg/xfce4/xinitrc -- /etc/X11/xinit/xserverrc
user 7081 0.0 0.0 324540 14064 ? Sl Nov15 0:00 | \_ xfce4-session
user 7100 0.0 0.3 562128 62800 ? Sl Nov15 0:48 | | \_ tilix
user 23644 0.0 0.0 31132 6136 pts/11 Ss 14:32 0:00 | | | \_ /bin/bash
user 11884 0.0 0.0 20024 3044 pts/11 S+ 14:58 0:00 | | | | \_ /bin/bash ./test.sh
user 11886 0.0 0.0 14776 700 pts/11 S+ 14:58 0:00 | | | | \_ sleep 15
user XXXXX 0.0 0.0 XXXXX XXX XXXXXX S+ XX:XX 0:00 \_ sleep 2000
답변1
예, 가능합니다.
여기서 원하는 것은 프로세스를 다시 부모화하는 것입니다. 원래 상위 프로세스가 종료되면 Unix는 프로세스를 PID 1로 재설정합니다.
그러니 당신이 해야 할 일은원래내보내기의 상위입니다 sleep 2000
.
sleep 2000
서브셸에서 배경을 시작하면 이 작업을 수행할 수 있습니다.
그것은 다음과 같습니다:
#!/bin/bash
sleep 15 &
( sleep 2000 & )
# do something else here, like:
sleep 1
echo "=== Listing 'sleep' process tree: ==="
ps auxfwww | grep -i [2]000 -B 10
echo "=== All done. ===