Получение PID процесса в оболочке Script

Я пишу одну оболочку script, и я хочу получить PID одного процесса с именем "ABCD". Я сделал это:

process_id=`/bin/ps -fu $USER|grep "ABCD"|awk '{print $2}'`

Это получает PID двух процессов, то есть процесса ABCD и самой команды GREP, если я не хочу, чтобы PID выполнялся GREP, и я хочу только PID процесса ABCD?

Просьба предложить.

Ответ 1

Просто смажьте grep самостоятельно!

process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'`

Ответ 2

Вы пытались использовать pidof ABCD?

Ответ 3

Это очень прямолинейно. 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

Ответ 4

ps имеет возможность для этого:

process_id=`/bin/ps -C ABCD -o pid=`

Ответ 5

Вы можете использовать эту команду, чтобы grep pid определенного процесса & эхо $b, чтобы напечатать pid любого запущенного процесса:

b='ps -ef | grep [A]BCD | awk '{ printf $2 }''
echo $b

Ответ 6

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

/bin/ps -fu $USER | awk '/ABCD/ && !/awk/ {print $2}'