【发布时间】:2013-12-16 09:32:05
【问题描述】:
最近,我在使用popen(3) 和pclose(3) 时遇到了一个奇怪的问题。就像这样:
//a.sh
#!/bin/bash
cat /etc/issue
sleep 3
//b.sh
#!/bin/bash
cat /etc/issue
echo "before sleep"
sleep 3
我的 C 程序:
#include <stdio.h>
int main(void) {
1: FILE *fl = popen("sh a.sh", "r");
2: FILE *fl = popen("sh b.sh", "r");
int t = pclose(fl);
printf("%d\n", t);
return 0;
}
接下来,我将编译和运行这个程序,分为 4 个步骤:
case 1:注释第2行,然后编译运行,程序不打印0,直到shell cmd终止。
case 2:注释第1行,然后编译运行,程序立即终止,打印13,也就是说pclose的退出状态是13,我查了linux errno:
13 EACCES +Permission denied
有人会帮助我并告诉我原因吗?谢谢。
【问题讨论】:
-
pclose返回子进程的退出状态,而不是errno.h错误值。 -
谢谢,我将使用 WEXITSTATUS 宏和 WIFEXITED 宏