我需要你的帮助 !
我做了一个报告deamon(在c中)需要在服务器上定期执行一堆命令.
一个简单的示例命令是:“/ bin / ps aux | /usr/bin/wc -l”
第一个想法是使用popen()分叉运行命令的子进程,并在父进程中设置一个alarm(),如果命令尚未退出,则在5秒后终止该子进程.
我尝试使用“sleep 20000”作为命令,子进程被杀死但是sleep命令仍在运行…不好.
第二个想法是使用execlp()而不是popen(),它使用简单的命令(即没有管道),如“ls -lisa”或“sleep 20000”.我可以得到结果,如果5秒后没有完成,则会杀死进程.
现在我需要执行“/ bin / ps aux | /usr/bin/wc -l”命令,显然它不能直接使用execlp(),所以我尝试了“hack”:
execlp("sh","sh","-c","/bin/ps aux | /usr/bin/wc -l",NULL);
我工作……或者说我想…我试过了
execlp("sh","sh","-c","sleep 20000",NULL);
只是为了确定并且子进程在5秒后被终止(我的超时)但是sleep命令就在那里……
我愿意接受建议(我会讨价还价)!
提前致谢 !
TLDR;
我需要一种方法:
>执行“复杂”命令,例如“/ bin / ps aux | /usr/bin/wc -l”
>得到它的输出
>如果需要超过5秒,请确保它被杀死(ps命令只是示例,实际命令可能会永久挂起)
本文探讨了在C语言中定时执行带有管道操作的复杂命令的方法,包括如何获取命令输出及确保长时间运行的命令能够被及时终止。
656

被折叠的 条评论
为什么被折叠?



