当前位置: 技术问答>linux和unix
为什么一调用system就挂了
来源: 互联网 发布时间:2016-06-28
本文导语: 主进程里fork一个子进程,子进程调用动态库里的一个函数,取io的数据,经常会挂,有时不挂。 system("iostat -xnp 1 2 > /tmp/iostat");//在控制台执行这个字符串是可以的。 | system 本身是很稳定的,你查查...
主进程里fork一个子进程,子进程调用动态库里的一个函数,取io的数据,经常会挂,有时不挂。
system("iostat -xnp 1 2 > /tmp/iostat");//在控制台执行这个字符串是可以的。
system("iostat -xnp 1 2 > /tmp/iostat");//在控制台执行这个字符串是可以的。
|
system 本身是很稳定的,你查查你的程序吧。
|
需要fork吗?有点多余哦。
system本身就是fork+exec实现的。
你查看下errno看看。
或者改用fork+exec试试。
system本身就是fork+exec实现的。
你查看下errno看看。
或者改用fork+exec试试。
|
到底是 system 本身出问题,还是 szCmdLine 执行时出问题
手工执行 szCmdLine 没问题的话,可以确定一下两种方式下的相关环境变量
手工执行 szCmdLine 没问题的话,可以确定一下两种方式下的相关环境变量
|
前面我有提到应用程序里尽量少用system()调用系统命令。用得越多程序越不稳定。在实践中,我们尽量这样处理的,能够创建线程来处理的就用线程来处理。能够用系统函数来处理的就调用系统函数,也尽量不去调用系系统命令。
iostat 命令用来监视系统输入/输出设备负载,这通过观察与它们的平均传送速率相关的物理磁盘的活动时间来实现。
从这里来看,可以判断iostat可能是动态检测的,会不停的有刷新。
如果你要查看监测日志,最好看看iostat的源代码,自己去实现 iostat -xnp 1 2
另外你也可以试试发异步消息idle来调用 system("iostat -xnp 1 2 > /tmp/iostat")。
iostat 命令用来监视系统输入/输出设备负载,这通过观察与它们的平均传送速率相关的物理磁盘的活动时间来实现。
从这里来看,可以判断iostat可能是动态检测的,会不停的有刷新。
如果你要查看监测日志,最好看看iostat的源代码,自己去实现 iostat -xnp 1 2
另外你也可以试试发异步消息idle来调用 system("iostat -xnp 1 2 > /tmp/iostat")。