【发布时间】:2016-08-01 05:37:02
【问题描述】:
我正在用 Go 编写一个 SDK,集成商将通过本地套接字连接与之通信。
从集成应用程序中,我需要一种将 SDK 作为进程启动的方法,但更重要的是,我需要能够在主应用程序关闭时取消该进程。
这个问题与语言无关(我认为),因为我认为挑战与 linux 相关。即如何启动程序并在以后取消它。
一些可能的方法:
- 我认为这是通过 exec 启动程序,获取它的 PID 或某个 ID,然后使用它在以后杀死的情况。可能需要 Sudo 来执行此操作,这并不理想。此外,这也不是好的做法,因为您将有效地强制关闭 SDK,没有时间进行清理。
- 通过任何方式启动程序。一旦准备好关闭,只需通过 SDK API 发送一个“关闭”命令,这将允许 SDK 清理、管理状态然后退出应用程序。
请问这方面的最佳做法是什么?
【问题讨论】:
-
1) 为什么要使用
sudo来终止您创建的进程?它应该与调用程序具有相同的权限。 2) 你有什么理由排除signals先验? -
1) 我不确定您是否需要 sudo 来杀死一般进程。 2)我不知道信号..请详细说明..
-
1) 据我所知,没有 2) 给定一个信号,您可以为它设置一个信号处理程序,这是一个每当信号通过异步传递到进程时触发的函数打断。因此,您可以将特定信号发送到您的应用程序,并定义一个信号处理程序,通过适当地释放其资源来优雅地终止它。具体细节可能取决于您使用的技术(进程、posix 线程等)。你可以在这里找到更多相关信息 -> man7.org/linux/man-pages/man7/signal.7.html