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

おすすめ記事