Принудительный запуск родительского процесса первым

#c #linux-kernel #operating-system #fork

#c #linux-ядро #операционная система #форк

Вопрос:

В моей системе (Opensuse) по умолчанию дочерний процесс всегда выполняется первым, после fork. Существуют также способы принудительного запуска дочернего процесса первым. Я хотел бы знать, есть ли какой-либо способ принудительно запустить родительский процесс первым?

Комментарии:

1. Это зависит от типа операционной системы и времени переключения контекста. Единственный способ, который вы можете сделать, это написать sleep (время) в child, чтобы он получал cpu после родительского процесса

2. Да, это могло бы произойти, но даже тогда дочерний процесс должен быть запущен один раз, чтобы выполнить sleep / sigsuspend.

3. Вы можете организовать создание дочернего процесса в SIGSTOP отредактированном состоянии с помощью ptrace .

Ответ №1:

Вы можете использовать этот метод

 pid_t pid = fork();
if (pid == -1)
    abort();
else if (pid == 0) 
{
    raise(SIGSTOP); // stop the child
} 
else 
{
    waitpid(pid, NULL, WUNTRACED); // wait until the child is stopped
    kill(pid, SIGCONT); // resume the child
}