Я хочу проверить pclose (3), будет ли он ждать завершения команды оболочки. Я пишу две маленькие программы оболочки.Почему pclose (3) не ожидает завершения команды оболочки
//a.sh
#!/bin/bash
sleep 3
//b.sh
#!/bin/bash
echo "something"
sleep 3
с программой:
//ptest.c
#include <stdio.h>
#include <sys/wait.h>
int main(int argc, char **argv) {
char *filename = argv[1];
char *mode = argv[2];
FILE *fl = popen(filename, &mode);
int t = pclose(fl);
if(WIFEXITED(t)) {
printf("exit status:%d\n", WEXITSTATUS(t));
}
return 0;
}
затем компилировать: $ НКУ -o Ptest ptest.c
рядом запустить Ptest (мой компьютер Ubuntu 12.04.3 LTS):
$ ./ptest "sh a.sh" r
$ exit status:0
этот тест будет wait shell разорвать и выход состояния выхода 0.However когда я бегу Ptest как следующий вид:
$ ./ptest "sh b.sh" r
$ exit status:141
на этот раз, Ptest не ждать оболочки программы и завершает свою работу сразу, я просто добавить эхо заявление перед сном, но результат был другим. Я не знаю почему.
Разве вы не задали [тот же вопрос] (http://stackoverflow.com/q/20607398/464709) несколько часов назад? –
Возможно, это проблема ввода-вывода. Попробуйте 'fgets()' ваш файловый дескриптор (см. [Пример] (http://pubs.opengroup.org/onlinepubs/7999959899/functions/popen.html)). – jml
Из чего вы заключаете, что оболочка завершена или нет? – alk