调用 "start"启动程序,调用 "stop"关闭 C 中的当前实例

标签 c

我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知道如何获取正在运行的程序的当前实例。我可以很好地解析选项(使用 getopt/optarg),但目前,./my-program stop 只是启动一个新实例,而不是调用 ./my-program start 启动它。

我想这样做的原因是因为另一个程序将向我的服务器发出停止信号,所以像 ./my-program stop 这样的调用非常简单,它可以停止服务器循环并关闭所有打开的 fd。谢谢!

是否可以在 C 程序本身中执行此操作,还是通常由外部处理?

最佳答案

使用“停止”参数运行时,您将始终运行一个单独的进程。 您需要找到正在运行的守护进程并向其发送信号以停止它。当你的守护进程启动时(选项“开始”),你可能想将它的 pid 存储在某个地方,这样当它以“停止”选项启动时,它可以检索守护进程的 pid 并向它发送一个信号来停止它。您还可以解析进程表以找到您的守护进程,但这会更复杂。

关于调用 "start"启动程序,调用 "stop"关闭 C 中的当前实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3996848/

相关文章:

c - 使用堆栈以相反顺序打印字符串时出错

c - 为什么 C 创建一个空文本文件

c - 不用IDE执行C程序的简单方法

C printf 在它下面的所有行上导致错误

java - fork 一个进程

c - Fortran 到 C,修剪对分配给字符串的空间的影响

c - 为什么 GCC -mcmodel=large 在没有 -fPIC 的情况下即使使用 -no-pie 标志也会向函数调用添加偏移量?

c - 清除堆栈后打印链表时出现段错误

分配 `ab` 时包含单个字符的字符

c - 为什么像\a、\v 这样的标准转义序列不起作用?为什么' 没有\, 就可以工作,并且是\?标准?