Bash: 상위 PID와 독립적으로 명령을 실행하시겠습니까?

Bash: 상위 PID와 독립적으로 명령을 실행하시겠습니까?

다음 test.sh스크립트를 실행하세요.

#!/bin/bash
sleep 15 & sleep 2000

그런 다음 View Running Processes 를 사용하여 $ ps auxfwww | grep -i [2]000 -B 10다음 정보 1188611887PID를 얻습니다.

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. ===

관련 정보