ребята, у меня есть следующий код c:
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <errno.h>
int main (int argc, char *argv[])
{
int exit;
pid_t tc_pid, ret_pid;
tc_pid = fork();
if(tc_pid != 0){
ret_pid = wait(&exit);
printf("parent process done, tc_pid = %d, ret_pid = %d, errno = %d\n", tc_pid, ret_pid, errno);
fflush(stdout);
}
printf("parent process done, tcpid = %d, my_pid = %d\n", tc_pid, getpid());
fflush(stdout);
return 0;
}
вывод на xcode:
parent process done, tcpid = 0, my_pid = 74377
parent process done, tc_pid = 74377, ret_pid = -1, errno = 4
parent process done, tcpid = 74377, my_pid = 74374
где здесь возвращаемое значение wait() равно -1 (должно быть 74377, если правильно), а errno равно -4
Однако, когда я использую тот же код, запущенный в терминале (я использую zsh), вывод:
parent process done, tcpid = 0, my_pid = 74419
parent process done, tc_pid = 74419, ret_pid = 74419, errno = 0
parent process done, tcpid = 74419, my_pid = 74418
чего я и хочу. Кто-нибудь знает, почему это произошло? Спасибо, парни.
моя OSX — 10.11.3, а моя машина — MBPR начала 2015 года, xcode 7.2.1, gcc 4.2.1, Apple LLVM версии 7.0.2 (clang-700.1.81), цель: x86_64-apple-darwin15.3.0, модель потока : позикс