Как перевоспитание остановленного процесса heppens? Почему остановленный процесс просто прекращается после повторного воспитания?переустановление остановленного процесса
Точнее, предположим, что у меня есть код, как этот
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/user.h>
#include <sys/syscall.h>
#include <stdio.h>
int main(void) {
pid_t child;
child = fork();
if (child == 0) {
int t = 0;
while (true) {
printf("%d. I'm %d, my parent is %d\n", t++, getpid(), getppid());
sleep(1);
}
} else {
printf("I'm the parent. My pid is %d\n", getpid());
printf("Starting to wait for 30 seconds\n");
sleep(30);
printf("Done waiting, aborting\n");
}
}
Когда я запускаю этот код процесс дочерний процесс работает и родитель просто спит. По прошествии 30 секунд родительский процесс завершается, и дочерний процесс теперь становится дочерним элементом init
и продолжает работу. Все нормально.
Но если я запускаю этот код и в первые 30 секунд, это исполнение я также запустить
kill -SIGSTOP <child_pid>
Затем дочерний процесс останавливается (T
состояние в ps xaf
) и родительский процесс спит. По прошествии 30 секунд родительский процесс возвращается из сна и просто заканчивается (по мере того, как он достиг конца main
), но дочерний процесс вместо повторного воспроизведения на init
в остановленном состоянии просто завершается. Я не вижу его в ps xaf
и если запустить lastcomm
я вижу этот вывод:
a.out F X equi pts/5 0.00 secs Wed Mar 16 17:44
Почему это происходит, что остановленный процесс умирает после повторного воспитания детей? Возможно ли в linux перезагрузить процесс остановки?
Почему вы хотите это сделать? – nzc
@nzc есть такая вещь, как 'criu' (см. Criu.org или https://github.com/xemul/criu). Я хочу добавить функцию' --leave-stop' в 'criu restore' (она в настоящее время только доступно с 'criu dump') – PepeHands
Я думаю, что вы можете получить лучшие результаты, если вы включите некоторые из этих деталей в свой вопрос. Я думаю (но не уверен), что часть проблемы заключается в том, что вы можете использовать сигналы управления работой так, как они не предназначены для использования. Включение контекста для того, почему вы хотите использовать их, может помочь кому-то, кто знает, объяснить, почему и, возможно, предложить правильный подход. – nzc