我需要你的帮助!
我做了一个报告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;
我需要一种方法:
答案 0 :(得分:5)
使用coreutils的timeout
命令:
/usr/bin/timeout 5 /bin/sh -c "/bin/ps aux | /usr/bin/wc -l"