Найдите PID Процесса по имени без Использования popen () или система ()

Аххое !!! Наконец-то получил мой ответ. аннотация: "nginx.ingress.kubernetes.io/rewrite-target: /" Я делал аннотацию, но отсутствует "nginx". в начале, который был единственной причиной ошибки и занял весь мой день. Цель этой строки - фактически перенаправить в root с любого маршрута, который мы пишем перед curl. Поскольку root - это место, где обычно у нас есть точка входа, то есть index.html в моем случае.

5
задан Srikanth 17 December 2008 в 15:53
поделиться

6 ответов

Вы упомянули использование Linux. Это не самое чистое решение, но можно пройти каждую запись в/proc и проверить имя процесса в cmdline против того, что Вы ищете.

4
ответ дан 13 December 2019 в 05:43
поделиться

Используйте sysctl - Пример кода

РЕДАКТИРОВАНИЕ - это доступно в Linux, посмотрите здесь

4
ответ дан 13 December 2019 в 05:43
поделиться

Чтения Procfs являются очень дешевыми, многие люди думают об итерации через/proc как, они были бы, выполняя итерации через/, действительно не случай вообще.

Сэкономьте некоторое время путем пропуска любой записи, которая находится под 1000, нет никакого смысла в исследовании потоков ядра. Так, в основном.. после opendir (), если strtoint () думает, запись является интервалом, и что интервал больше, чем или равен 1 000, просто считайте/proc / % d/stat.

Старайтесь избегать желания просто разрешить ссылку 'exe', поскольку это не собирается говорить Вам состояние процесса, который будет получать сигнал. Например, если бы цель находится в 'D' состояния (дисковый сон), Вы хотели бы знать, поскольку сигнал не будет сразу поставлен, или возможно никогда, если состояние D будет постоянным.

В большинстве систем, там будет 70 - 120 процессами для исследования, и Вы будете часто находить свой целевой путь прежде, чем достигнуть конца.

2
ответ дан 13 December 2019 в 05:43
поделиться

почему не использовать fcntl с F_GETOWN?

0
ответ дан 13 December 2019 в 05:43
поделиться

Это, кажется, хорошо работает для меня.

Вы могли бы хотеть дать полный путь процесса, хотя, чтобы Вы не уничтожаете процесс, который имеет аналогичное имя.

Основное преимущество этого состоит в том, что можно указать сигнал, что Вы хотите отправить.

system("killall -s 9 process_name");
0
ответ дан 13 December 2019 в 05:43
поделиться

Вы упоминаете: «Один из способов, который я мог придумать, - это отправить запрос сокета этому процессу и запросить его PID». Похоже, что процесс, который вы пытаетесь убить, - это программа, которую вы написали.

Если это так, каноническим решением будет сохранить pid в файле (обычно в / var / run, если у вас есть доступ к it) во время работы программы и удалите файл при выходе из программы. Таким образом, определить, запущена программа или нет, так же просто, как

if kill -0 $(cat /var/run/myprog.pid 2>/dev/null) 2>/dev/null; then
    echo Running!
else
    rm -f /var/run/myprog.pid
    echo "Not running."
end

Тщательное изучение всех последствий приведенного выше кода, вероятно, научит вас многому о том, как работают файлы PID. Или вы можете просто попросить более подробное объяснение.

2
ответ дан 13 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

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