执行起来,发现脚本停止服务后,立马跟随服务一起停止。所以只能停止服务,后续步骤无法完成。无论是linux 还是windows,都有这种问题。
windows
服务进程创建work进程时,一般都会创建job,同时设置JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
效果是,只要服务进程退出,那么它创建的work进程也会全部退出,连同work进程的子进程,孙进程。。。
脚本随着work进程一并退出的原因就在这
其实也很好解决,利用JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 就可以让work进程的子进程自动脱离Job,从而避免被杀
或者创建work进程时加上JOB_OBJECT_LIMIT_BREAKAWAY_OK,work进程创建子进程(升级)的时候设定CREATE_BREAKAWAY_FROM_JOB,也可以脱离Job避免被杀
linux
systemd(1)创建work进程时,默认是control-group,和windows的job作用类似
效果是,只要work进程退出,那么它创建的子进程,孙进程。。。也会全部退出
解法也很简单
设置 KillMode=process 就可以让work进程的子进程避免被杀
但是work的子进程管理就需要work进程自己精细控制了