
1 typetraits 2021 年 9 月 18 日 在 main.sh 里保存一下 nohup 启动的程序的 pid,然后结束进程的时候 kill 这个 pid |
3 ffxung OP @typetraits 我 kill nohup 启动起来的`main .sh`的 pid, 发现只是`mian .sh`杀掉了, 子进程还在. 你说的是不是这个意思? |
4 triangle111 2021 年 9 月 18 日 我会写 restart 的 shell,在 nohup 之前找出所有关于启动命令的 pid 然后所有都 kill 掉 |
5 Rkls 2021 年 9 月 18 日 用 c 实现下,用到 daemon,fork,execvp,waitpid,kill 几个函数,pid 在 daemon 之后存到文件里,kill 的时候读就行了 |
6 makelove 2021 年 9 月 18 日 别 nohup 了,systemd-run 吧,完美解决你说的问题 |
10 codehz 2021 年 9 月 18 日 via Android 可以考虑开一个 pid 命名空间,然后杀掉 pid 为 1 的进程就可以解决 |
11 muzuiget 2021 年 9 月 18 日 要维护进程状态,建议用 supervisord 把平安保。 |
12 msg7086 2021 年 9 月 18 日 几乎是唯一靠谱的方法是走 cgroups 管理进程树。你 nohup 启动的程序开出来的进程也不保证就是在这个程序旗下的。只有 cgroups 可以追溯到所有的子进程。 所以用 systemd 来管理吧,多省事…… |
13 ysc3839 2021 年 9 月 18 日 via Android 印象中 POSIX 下没有一个可靠的杀死所有子进程的方法,即子进程有办法脱离进程树,不被杀死。 Linux 下可以用前面提到的 pid namespace 或者 cgroups 。 Windows 下可以使用 Job object 实现。 |
14 ongongethan 2021 年 9 月 18 日 via iPhone kill -9 `lsof -ti:port` |
15 ila 2021 年 9 月 18 日 via Android supervisor 或 pm2,专业事让专业工具干 |
16 yanqiyu 2021 年 9 月 20 日 放弃 nohup,使用 systemd-run,可以更加有效的管理程序的生命周期和资源占用 |