![проверка запущенного процесса](https://rvso.com/image/23957/%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0%20%D0%B7%D0%B0%D0%BF%D1%83%D1%89%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%B0.png)
Меня просят проверить и завершить процессы, с которыми я не знаком. Поэтому, когда я ls
нахожусь в папке bin, я вижу несколько процессов .sh
. Но я хочу знать, какой процесс связан с каким процессом tomcat.
Есть ли какой-нибудь простой способ это выяснить?
Пример startmyprocess1.sh
, но когда я это делаю, ps -ef | grep startmyprocess1
не возвращает запущенный процесс.
Но на самом деле имя запущенного процесса tomcat — myprocess
, поэтому когда я это делаю ps -ef | grep myprocess
, я могу видеть запущенный процесс. Чтобы узнать это, мне нужно спросить ответственного человека.
Итак, имена разные. Если так, мне нужно спросить его несколько раз. Есть ли лучший способ выяснить это?
решение1
попробуйте это..,(не проверено)
ps -aux | grep "yourprocess"
Например,
ps -aux | grep "httpd"
решение2
Запуск myprocess из startmyprocess.sh делаетнетНазовите процесс в соответствии с базовым скриптом оболочки, поэтому ваш запрос ps -ef | grep startmyprocess1
не возвращает результат.
Вот почему многие процессы, особенно демоны, записывают свой pid в файл, чтобы вы могли легко ссылаться на его процесс. Это можно сделать с помощью:
#!/bin/sh
pid=`myprocess`
echo $pid > /tmp/myprocess.pid
или вы можете запросить, $!
какой из процессов содержит последний pid:
#!/bin/sh
myprocess
echo $! > /tmp/myprocess.pid
и запросить/вывести список процессов по их pid:
ps --pid $PID
решение3
Я думаю, что программное обеспечение типа «top» справится с этой задачей отлично.
Тип:
top
или
htop
решение4
Ответ от @invert многое объяснил, скрипт оболочки просто выполняет команды внутри него. Это значит, что вы не получите имя скрипта оболочки при выводе top
или htop
, который просто печатает /proc/$PID/cmdline каждой процедуры внутри скрипта оболочки.
Помимо использования echo $!
after command для получения PID того, что вам нужно. Я бы хотел использовать pgrep
command, когда мне это нужно (или pkill, если вы хотите убить его).
pgrep, pkill — поиск или сигнализация процессов на основе имени и других атрибутов
pgrep просто выполняет grep ваших аргументов через /proc/*/cmdline и выводит соответствующие PID. pkill совместим с kill, поэтому вы можете легко pkill любой процедуры с помощью cmdline.