Предположим, у меня есть исполняемый файл exe, который порождает дочерний процесс. Этот дочерний процесс должен стать демоном, и нам нужно изменить его имя. Далее я хочу использовать killall для отправки сигнала этому процессу с использованием нового имени, но мне нужно использовать старое имя.
Порядок событий следующий:
- start 'exec'
- fork -> выход, если родитель
- detach (чдир, сетсид, умаск)
- execvp ('exec', 'daemon', ...)
В 4 для argv [0] установлено значение 'daemon'.
После этого я могу сделать 'ps' и 'top', и я аккуратно вижу имя 'daemon', появляющееся в выходных данных этих команд. Однако когда я пытаюсь завершить процесс (отправить ему сигнал) с помощью killall, я должен указать имя exec, а не daemon.
Кажется, что ядро не полностью знает о новом имени.
Причина, по которой мне нужна эта функциональность, заключается в том, что я хочу порождать несколько дочерних процессов с разными обязанностями, используя один и тот же исполняемый файл. Я также хочу иметь возможность остановить и запустить их по отдельности, ссылаясь на них по имени. И я не хочу символически связывать новые имена с общим исполняемым файлом exec (как это делает busybox).
Есть ли способ обойти это?
Я использую Linux Ubuntu 9.10.
Ура,
Johan