我有一个程序调用我创建的shell脚本工具,它通过一个目录并压缩文件并获取校验和值并调用其他工具来上传文件。该操作大约需要3到4分钟。
我这样称呼脚本:
int result = system("/bin/sh /path/to/my/script");
通过使用exec()
函数族,我也得到了相同的结果:
int child = fork();
if(child == 0) {
execl( "/bin/sh", "sh", "/path/to/my/script", (char*)0 );
}
我知道使用exec
你可以将输出重定向到父程序,这样它就可以读取命令行工具的输出,但除此之外你应该何时使用system
而不是{{1} }}?
答案 0 :(得分:2)
暂时忽略使用system
系列功能时exec
的便携性是不可移植的......
当您将exec
系列函数与pipe
,dup
,wait
等其他POSIX函数结合使用时,您可以更好地控制如何传递父进程和子进程之间的数据。
如果您不需要任何这些控件,即您只想执行命令,那么最好使用system
,IMO。
答案 1 :(得分:1)
您问题中的第一个system
调用将执行相同的操作,您在下一段代码中执行的操作(fork和execl)
来自文档:
The system() library function uses fork(2) to create a child process
that executes the shell command specified in command using execl(3)