Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何从linux应用程序检测关机/重新启动_C_Linux_Shutdown_Reboot - Fatal编程技术网

C 如何从linux应用程序检测关机/重新启动

C 如何从linux应用程序检测关机/重新启动,c,linux,shutdown,reboot,C,Linux,Shutdown,Reboot,我有一个用C编写的应用程序,它作为守护进程运行,需要在系统处于关闭或重新启动状态时通过RS232发送一些信息,它需要区分这两者。 所以我的想法是: 在我的应用程序脚本/etc/init.d/my_app中,在脚本的“stop”情况下,我将运行/sbin/runlevel命令以获取当前运行级别: 0-关闭状态 6-重新启动状态 然后我将执行一些命令来通知我的守护进程它的状态,守护进程将通过rs执行通信,然后将退出 我认为它应该可以工作,但它可能不是最好的解决方案,特别是因为我的应用程序已经作为守护

我有一个用C编写的应用程序,它作为守护进程运行,需要在系统处于关闭或重新启动状态时通过RS232发送一些信息,它需要区分这两者。 所以我的想法是: 在我的应用程序脚本/etc/init.d/my_app中,在脚本的“stop”情况下,我将运行/sbin/runlevel命令以获取当前运行级别: 0-关闭状态 6-重新启动状态 然后我将执行一些命令来通知我的守护进程它的状态,守护进程将通过rs执行通信,然后将退出

我认为它应该可以工作,但它可能不是最好的解决方案,特别是因为我的应用程序已经作为守护进程运行,也许我可以直接从系统/内核/库或通过unix套接字或其他方式接收一些信号

致意


Marek

我不确定在系统关闭时向应用程序发送了哪个信号。我最好的猜测是SIGTERM,如果应用程序没有关闭SIGKILL。那么你有没有试着抓住SIGTERM并正确地关闭你的程序?网上有很多关于如何做到这一点的信息


对于更复杂的过程处理,您可以将SIGUSR1、SIGUSR2发送到应用程序。

是的,我知道SIGTERM和SIGKILL信号,我也在处理SIGUSR1和SIGUSR2,但这些都不能满足我的需要。SIGTERM和SIGKILL并不意味着系统将停止重新启动或停止。和SIGUSR1或SIGUSR2,我可以用来向我的应用程序发送信号,例如在执行“停止”案例期间从/etc/init.d/my_脚本发出信号。如果有人需要它:当系统停止重新启动或关机时,init设置变量$RUNLEVEL,在执行“停止”案例期间可以在/etc/init.d/my_脚本中读取该变量,并且可以执行适当的操作,例如通过向正在运行的应用程序发送SIGUSR1。