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