#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc, char ** argv)
{
int pid;
int status;
pid = fork();
if (pid < 0)
{
printf("Cannot create a child process");
exit(1);
}
else if (pid == 0)
{
printf("I am the child process. %d \n", getpid());
printf("The child process is done. \n");
fflush(stdout); // it does not write immediately to a disk.
exit(0);
}
else
{
printf("I am the parent process.%d \n", getpid());
sleep(5); // sleep does not works
pid = wait(&status); // want to wait until the child is complited
printf("The parent process is done. \n");
fflush(stdout); // it does not write immediately to a disk.
exit(1);
}
}
Привет, ребята, я в настоящее время пытаюсь создать дочерний процесс. Однако пока что хорошо, что сейчас я пытаюсь выполнить сначала ребенка и распечатать его, и всегда печатать сообщение «Последний родительский процесс».Выполнение дочернего процесса перед родителем в C
I am the parent process.28847
I am the child process. 28848
The child process is done.
The parent process is done.
В настоящее время печатает это:
I am the parent process.28847
The parent process is done.
I am the child process. 28848
The child process is done.
Это мой первый раз, используя разветвление, так что я не очень уверен в том, что я делаю, я пытался спать и ждать (& статуса) в попробуйте подождать, пока завершится дочерний процесс, а затем выполните родительский элемент, но что-то не работает.
P.S. извините за плохой макет, кулак с использованием stackoverflow.
Вы должны, вероятно, использовать [ 'ожидание()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html) или [ 'waitpid()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html). –
В вашем коде «Родительский процесс завершен» будет печататься как последний раз (поскольку вы используете 'wait()'). – usr
Большое спасибо, мне удалось это исправить. Я собираюсь проверить мьютекс и семафоры и как его улучшить. –