Chinaunix首页 | 论坛 | 博客
  • 博客访问: 584678
  • 博文数量: 92
  • 博客积分: 5026
  • 博客等级: 大校
  • 技术积分: 1321
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-28 11:04
文章分类

全部博文(92)

文章存档

2011年(9)

2010年(17)

2009年(12)

2008年(54)

我的朋友

分类: LINUX

2009-05-29 13:51:18

linux 的system() 函数,和ACE_OS::system() 函数非常有用和方便。但是经常也会出现一些问题。总结一下。
 
ace_os::system() 和 system() 基本是一样的。(没看源码所以不知道)
 
system 返回值分为两个部分。其中高24位存放的是程序的返回值。低八位主要是存放信号的值。(system属于阻塞型调用。被信号中断时)
 
由于system是阻塞性调用,如果遇到长时间的调用,则很有可能被信号中断,从而引起不必要的麻烦。因此最好在程序中屏蔽掉信号中断。在屏蔽掉信号中断的同时,应该应该留意屏蔽信号是否对程序其他部分产生什么影响。而且由于子进程是继承父进程的信号屏蔽位的。所以system调用的子进程同样也是屏蔽了所有信号的。因此也要考虑下,是否信号屏蔽对子进程的运作会产生什么影响。如,system("ping 192.168.1.1 -c2"),子进程ping是通过SIGALRM信号实现计数的,如果此时屏蔽了所有的信号中断,将会时程序卡死。
 
阅读(2861) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~