
1 gzk329 OP 我记得是 Java Process 启动子进程,会随着主进程挂掉而一起挂掉,但是这个子进程的实际 processId 好像和获取的 processId 不一致,加了 1 ,所有选择的脚本启动,能解决这个问题,但是主程序挂了的话,子进程会失去控制 |
2 cheng6563 2023 年 2 月 3 日 丢容器,程序 1 以 pid 1 启动,这样他挂了就整个容器都挂了。 |
3 Mohanson 2023 年 2 月 3 日 Linux 进程组 https://man7.org/linux/man-pages/man2/setpgid.2.html https://man7.org/linux/man-pages/man2/prctl.2.html PR_SET_PDEATHSIG 小章节 至于 Java 要用什么 API 调用这个不了解 |
4 killva4624 2023 年 2 月 3 日 Systemd 或者容器 |
5 ruanimal 2023 年 2 月 3 日 daemon |
6 eibici 2023 年 2 月 3 日 加例检吧? |
7 julyclyde 2023 年 2 月 3 日 你是腾讯 TEG 的吧?最好弃用那俩垃圾框架 启动脚本开头设置个 trap ,收到 SIGCHLD 的话就 kill 掉 %1 %2 %3 等等子进程 启动脚本里多个进程都&启动,转入后台,变成%1 %2 %3 然后脚本末尾 wait |
9 opengps 2023 年 2 月 3 日 需要反向思维(因为是子进程而不是子线程) 子程序单独加个线程去检测是否存在主进程,主进程不再则自己的进程退出 |
10 8355 2023 年 2 月 3 日 优雅停机? |
13 julyclyde 2023 年 2 月 3 日 “固定”这个就限制了:不会有什么好的方案 你必须得改 |
14 aw2350 2023 年 2 月 3 日 context 上下文。或者每个子服务 启动后都有一个异步独立线程去监听主服务的状态。 如果用 go 做,这是很简单的事情 |
15 litguy 2023 年 2 月 3 日 我们是 SIGABORT 自杀,自己捕获这个触发系统 PANIC |
16 jorneyr 2023 年 2 月 3 日 这 2 天用 go 启动进程: - 使用 os.StartProcess 启动的多个后台进程,go 进程挂了的话所有它启动的进程都会被杀掉 (满足楼主的需求) - 适用 exec.Command 执行 nohup x > 2>&1 & 启动的后台进程,go 进程挂了的话它启动的进程不会被杀掉,因为这些进程的 PPID 是 1 |
17 liuyongwang 2023 年 2 月 3 日 守护线程 daemon |
18 tool2d 2023 年 2 月 3 日 用 linux 管道把两个程序连接起来,如果管道挂了,那么两个程序都自动退出。 |
19 pkking 2023 年 2 月 3 日 PID 1 的进程不是会负责回收孤儿进程吗(如果这个进程结束了且没有人 wait ),在容器里有 tiini/dumb-init ,非容器的 systemd 都会做的吧 |
20 kaneg 2023 年 2 月 3 日 可以看下 systemd 。systemd 的功能强大到让一些 Linux 大牛吐槽它管的太多了,想必你的这个需求应该已经在它的考虑范围了。 |