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

Конфигурационные файлы INI-стиля могут иметь формат, подобный этому:

[heading1]
key1=value
key2=value

[heading2]
a=1
b=2

etc...

конфигурационные файлы conf-стиля более варьируются. Они могут выглядеть подобными этому:

# A comment
button 1 {
  name "hello"
  "text" hi.there
  "more..." {
    "something 123"  bla.bla "123"
  }
}

# Another comment
button 2 {
  # hello
  x=2
}

Или возможно немного как это:

# set server port
server.port = 1234

# make everything go faster
machine.turbo_button = activated

Это осуждено для конфигурационных файлов в подобных UNIX системах, чтобы иметь окончания строки стиля DOS/Windows, даже если файл должен иметь '.ini' расширение файла.

2
11.10.2013, 18:56
2 ответа

При выполнении этого в C необходимо сделать a setsid(2) в Вашем коде, наряду с некоторыми fork() и exit() вызовы. setsid() имеет этот эффект:

... создает новую сессию, если обработка вызовов не является лидером группы процесса. Обработка вызовов является лидером новой сессии, лидером группы процесса новой группы процесса, и не имеет никакого управления tty.

Это из страницы справочника. В основном, если процесс, это - лидер группы процесса, получает определенные сигналы, каждый идентификатор процесса в той группе процесса получает сигнал. Вы видите механизм для этого в kill(2) страница справочника. Если PID Вы звоните kill() на отрицательно, сигнал отправляется в каждый процесс в группе процесса.

Вы также должны fork() и exit() в правильных местах. В основном взгляд на инструкции относительно того, как стать процессом демона. Части необходимо сделать:

switch (fork()) {
case -1: return -1;
case 0:  break;
default: _exit(EXIT_SUCCESS);
}

setsid();

switch (fork()) {
case -1: return -1;
case 0:  break;
default: _exit(EXIT_SUCCESS);
}

Читайте о становлении процессом демона для большего количества объяснения позади этого кода.

5
27.01.2020, 21:53

Существует 2 пути к фону процесс и затем продолжают его. Если команда была запущена и затем фон с & можно использовать эту команду для разъединения его от терминала.

$ disown -a

Если Вы хотите изолировать процесс от зависать сигнала (ПОНУКАЮТ) и также разъединяют его от терминала (tty), можно использовать, это управляет также:

$ nohup <cmd>

Любой консольный вывод будет записан в файл, nohup.out.

Таким образом, я предположил бы, что Вы могли сделать что-то умное после того, как процесс был фоном с disown -a управляйте, была бы одна идея.

Поскольку другие идеи смотрят на мой ответ на этот вопрос U&L, названный: Где ветвление () на fork-бомбе :() {:|: и};:?.

C

Я смотрел бы на этот поток от Так, названный: C: должностное лицо/ветвление> Более не существующие процессы, конкретно этот ответ @Gilles.

2
27.01.2020, 21:53
  • 1
    ... кроме OP спросил, как достигнуть того же результата в C. –  derobert 11.10.2013, 19:33
  • 2
    @derobert - да я понял, что, но это не сайт программирования, таким образом, я показал ему методы U&L.. –  slm♦ 11.10.2013, 19:37
  • 3
    OP спрашивает о "UNIX C API и Системные Интерфейсы", который является частью сайта, по крайней мере, согласно Справочному центру. –  derobert 11.10.2013, 19:39
  • 4
    @derobert - верный, я ищу API C eqiv. теперь. Интересно все ответы идут ТАК 8-). Еще более интересный ответ, который я читаю, Gilles. –  slm♦ 11.10.2013, 19:40
  • 5
    @derobert - bruce бьют меня к нему. –  slm♦ 11.10.2013, 19:44

Теги

Похожие вопросы