Мне нужно родительский процесс закончился раньше, чем детский процесс. Это код:Как убить родительский процесс до завершения ребенка?
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
main()
{
extern int errno;
extern char* sys_errlist[];
pid_t pid;
int rv;
switch(pid=fork()) {
case -1:
perror("fork");
exit(1);
case 0:
printf(" CHILD: This is child-process!\n");
printf(" CHILD: My PID -- %d\n", getpid());
printf(" CHILD: My parent PID -- %d\n", getppid());
sleep(3);
printf(" CHILD: My new parent PID -- %d\n", getppid());//I think, that getppid() return 1
printf(" CHILD: Exit!\n");
exit(rv);
default:
printf("PARENT: This is parent-process!\n");
printf("PARENT: My PID -- %d\n", getpid());
printf("PARENT: My child PID %d\n",pid);
printf("PARENT: Exit!\n");
}
}
Но я не уверен, что это правильно. Выход этой программы:
PARENT: This is parent-process!
PARENT: My PID -- 943
PARENT: My PID -- 943
PARENT: My child PID -- 944
PARENT: Exit!
CHILD: This is child-process!
CHILD: My PID -- 944
CHILD: My parent PID -- 1
CHILD: My new parent PID -- 1
CHILD: Exit!
Спасибо! PS. Прошу прощения за мой английский
Добро пожаловать на переполнение стека. Вскоре прочитайте страницу [О программе]. Ваш английский был вполне понятен. Я бы написал: «Мне нужно, чтобы родительский процесс заканчивался раньше, чем дочерний процесс». –
Последующий вопрос - почему вам нужно, чтобы родитель закончил раньше. Если это просто для базовых целей тестирования, вы можете просто положить достаточно длинный «sleep» в дочерний элемент и выйти из родителя. Или вам нужно более долгое решение для реальной проблемы? Если это так, вы должны объяснить, что это за проблема. – Duck
@ Duck: существует множество причин, по которым дочерний процесс должен пережить его родительский элемент, не в последнюю очередь, когда родитель запускает процесс фона или демона. –