准备打包交活,这时候发现一个问题,程序无法终止。检查了一下在linux的工作过程,发现启动子进程之后,实际上是启动了两个进程,一个进程是/bin/sh,随后sh又启动了一个子进程自身的子进程sleep。而发出退出命令的时候,只有sh退出了,sleep进程仍然继续运行。对比同样的mac电脑上,sh进程是没有出现的,只有一个sleep进程,所以发出退出命令的时候,sleep正常关闭,系统表现正常。这从进程的观察中及实验的结果中,都可以证实我们的判断。另外一个办法则是直接为/bin/sh及我们的命令行进程建立一个进程组,这样最后发出的指令退出这个进程组,同样可以同时退出/bin/sh及sleep两个进程,达到我们的需求。

golang 后台进程的启动和停止操作

golang 后台进程的启动和停止操作

golang 后台进程的启动和停止操作