Ответ 1
Просто смажьте grep самостоятельно!
process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'`
Я пишу одну оболочку script, и я хочу получить PID одного процесса с именем "ABCD". Я сделал это:
process_id=`/bin/ps -fu $USER|grep "ABCD"|awk '{print $2}'`
Это получает PID двух процессов, то есть процесса ABCD и самой команды GREP, если я не хочу, чтобы PID выполнялся GREP, и я хочу только PID процесса ABCD?
Просьба предложить.
Просто смажьте grep самостоятельно!
process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'`
Вы пытались использовать pidof ABCD
?
Это очень прямолинейно. ABCD следует заменить именем процесса.
#!/bin/bash
processId=$(ps -ef | grep 'ABCD' | grep -v 'grep' | awk '{ printf $2 }')
echo $processId
Иногда вам нужно заменить ABCD на имя программного обеспечения. Пример. Если вы запускаете java-программу, например java -jar TestJar.jar &
, вам нужно заменить ABCD на TestJar.jar
ps имеет возможность для этого:
process_id=`/bin/ps -C ABCD -o pid=`
Вы можете использовать эту команду, чтобы grep pid определенного процесса & эхо $b
, чтобы напечатать pid любого запущенного процесса:
b='ps -ef | grep [A]BCD | awk '{ printf $2 }''
echo $b
Вы также можете покончить с grep
и использовать только awk
.
Используйте совпадение выражений awk
для соответствия имени процесса, но не самого себя.
/bin/ps -fu $USER | awk '/ABCD/ && !/awk/ {print $2}'