![Bash:执行独立于父PID的命令?](https://linux22.com/image/142246/Bash%EF%BC%9A%E6%89%A7%E8%A1%8C%E7%8B%AC%E7%AB%8B%E4%BA%8E%E7%88%B6PID%E7%9A%84%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
执行这个test.sh
脚本:
#!/bin/bash
sleep 15 & sleep 2000
然后,使用 查看正在运行的进程$ 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
您可以通过从子 shell启动后台来做到这一点。
就像是:
#!/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. ===