linux c启动外部进程,c – 启动和观看另一个进程的Linux最佳实践

在我的过程中,我需要启动/重新启动另一个进程.

目前我使用一个小堆栈大小的线程和以下代码:

void startAndMonitorA()

{

while(true)

{

system("myProcess");

LOG("myProcess crashed");

usleep(1000 * 1000);

}

}

我觉得这不是最好的做法.我不知道std :: system()调用阻塞或浪费的资源.我在嵌入式Linux上 – 所以一般来说我都在关心资源.

解决方法:

所示的代码适用于大多数情况.如果您真的关心资源使用情况,您应该知道您正在为正在监视的每个进程启动(并保留)一个线程.如果你的程序有一个事件循环,那么可以通过一些额外的努力(以及复杂性的增加)来避免这种事情.

实现这一点需要以下内容:

>而不是调用system(),使用fork()和exec()来启动外部程序.将其PID存储在全局表中.

>设置一个SIGCHLD处理程序,通知子事件退出的事件循环,例如通过向事件循环监视的管道写入一个字节.

>当一个孩子退出时,在一个循环中运行带有WNOHANG标志的waitpid,该循环只要有孩子收获就会运行. waitpid()将返回退出的子节点的PID,以便您知道从表中删除其PID,并安排重新启动它的超时.

标签:c-2,linux,child-process

来源: https://codeday.me/bug/20190627/1308135.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值