Почему я не могу использовать killall с новым именем, данным дочернему процессу с execvp () в Linux? - PullRequest
1 голос
/ 05 марта 2010

Предположим, у меня есть исполняемый файл exe, который порождает дочерний процесс. Этот дочерний процесс должен стать демоном, и нам нужно изменить его имя. Далее я хочу использовать killall для отправки сигнала этому процессу с использованием нового имени, но мне нужно использовать старое имя.

Порядок событий следующий:

  1. start 'exec'
  2. fork -> выход, если родитель
  3. detach (чдир, сетсид, умаск)
  4. execvp ('exec', 'daemon', ...)

В 4 для argv [0] установлено значение 'daemon'.

После этого я могу сделать 'ps' и 'top', и я аккуратно вижу имя 'daemon', появляющееся в выходных данных этих команд. Однако когда я пытаюсь завершить процесс (отправить ему сигнал) с помощью killall, я должен указать имя exec, а не daemon.

Кажется, что ядро ​​не полностью знает о новом имени.

Причина, по которой мне нужна эта функциональность, заключается в том, что я хочу порождать несколько дочерних процессов с разными обязанностями, используя один и тот же исполняемый файл. Я также хочу иметь возможность остановить и запустить их по отдельности, ссылаясь на них по имени. И я не хочу символически связывать новые имена с общим исполняемым файлом exec (как это делает busybox).

Есть ли способ обойти это?

Я использую Linux Ubuntu 9.10.

Ура, Johan

Ответы [ 2 ]

2 голосов
/ 05 марта 2010

попробуйте использовать pkill вместо killall

2 голосов
/ 05 марта 2010

Некоторые инструменты используют двоичное имя, другие используют имя процесса (то, что вы передаете в качестве первого аргумента execvp). Попробуйте справиться с этим:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...