当前位置: 代码迷 >> Solaris >> 为啥一调用system就挂了
  详细解决方案

为啥一调用system就挂了

热度:6547   发布时间:2013-02-26 00:00:00.0
为什么一调用system就挂了
主进程里fork一个子进程,子进程调用动态库里的一个函数,取io的数据,经常会挂,有时不挂。

system("iostat -xnp 1 2 > /tmp/iostat");//在控制台执行这个字符串是可以的。

------解决方案--------------------------------------------------------
system 本身是很稳定的,你查查你的程序吧。
------解决方案--------------------------------------------------------
需要fork吗?有点多余哦。
system本身就是fork+exec实现的。

你查看下errno看看。
或者改用fork+exec试试。
------解决方案--------------------------------------------------------
到底是 system 本身出问题,还是 szCmdLine 执行时出问题 
手工执行 szCmdLine 没问题的话,可以确定一下两种方式下的相关环境变量
------解决方案--------------------------------------------------------
前面我有提到应用程序里尽量少用system()调用系统命令。用得越多程序越不稳定。在实践中,我们尽量这样处理的,能够创建线程来处理的就用线程来处理。能够用系统函数来处理的就调用系统函数,也尽量不去调用系系统命令。

iostat 命令用来监视系统输入/输出设备负载,这通过观察与它们的平均传送速率相关的物理磁盘的活动时间来实现。

从这里来看,可以判断iostat可能是动态检测的,会不停的有刷新。

如果你要查看监测日志,最好看看iostat的源代码,自己去实现 iostat -xnp 1 2

另外你也可以试试发异步消息idle来调用 system("iostat -xnp 1 2 > /tmp/iostat")。
  相关解决方案