#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
}