Есть вот такой код: pid_t newprocess = fork(); if (newprocess < 0){ perror ("fork"); exitValue = -1; } else if (newprocess) { // child if(waitpid(newprocess,&status,0) < 0) { perror ("waitpid"); exitValue = -1; } else if(WIFEXITED(status)) { exitValue = WEXITSTATUS(status); } else if(WIFSIGNALED(status)) { exitValue = 0; } else { if (WIFSTOPPED(status)) printf ("exec failed: program stopped by signal %d\n", WSTOPSIG(status)); else printf ("exec failed: ???\n"); exitValue = -1; } } else { char *shell[] = {"/bin/sh", "-c", cmdline, NULL}; environ = envp; execvp(shell[0], shell); exitValue = errno; showSystemErrorMessage (exitValue); _exit(exitValue); } Код этот вызывается из Java-вского native метода. Почти всегда все работает хорошо, но иногда waitpid падает с ошибкой ECHILD, однако программа (это происходит всегда при вызове /bin/cp) отрабатывает нормально, т.е. файлы оказываются успешно скопироваными. В чем тут может быть дело? Что-то я не соображу. Единственное, что приходит в голову, глядя в man waitpid - может быть, игнорируется SIGCHLD. А что еще может привести к такому поведению? Спасибо.
Ответ на:
комментарий
от idle
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Какая-то мистика с execv (2004)
- Форум Почему зомби самоуничтожается? (2011)
- Форум Реализация конвейра (2019)
- Форум execl не принимает аргумент из pipe (версия 2, обновленная) (2015)
- Форум как присвоить ребенку новую группу процесса? (2020)
- Форум Передача имени файла дочернему процессу (2017)
- Форум помогите найти ошибки в следующем перловом коде (2004)
- Форум Разработка своего shell'a (2012)
- Форум fork && waitpid (2005)
- Форум fork && waitpid && dlopen (2005)