linux execlp ps -aux,使用管道执行命令并在c中执行超时(并读取...

本文探讨了在C语言中定时执行带有管道操作的复杂命令的方法,包括如何获取命令输出及确保长时间运行的命令能够被及时终止。

我需要你的帮助 !

我做了一个报告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命令只是示例,实际命令可能会永久挂起)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值