最近,當我使用popen(3)
和pclose(3)
時,出現了一個奇怪的問題。就像這樣:popen和pclose中的差異行爲
//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個步驟:
的情況下1:註釋行2,然後編譯並運行,程序在shell cmd終止之前不打印0。
的情況下2:註釋行1,然後編譯並運行,程序會馬上終止,並將其打印13,這就是說的pclose
退出狀態是13,我看到了Linux的錯誤號:
13 EACCES +Permission denied
同體會幫助我,並告訴我的原因?謝謝。
'pclose'返回子進程的退出狀態,而不是'errno.h'錯誤值。 –
謝謝,我將使用WEXITSTATUS宏和WIFEXITED宏 – yuxing