При каких обстоятельствах pgrep -x не может вернуть действительный pid?

Вы можете запустить его с помощью команды timeout ,

timeout - run a command with a time limit

Synopsis
timeout [OPTION] NUMBER[SUFFIX] COMMAND [ARG]...
timeout [OPTION]
Description

Start COMMAND, and kill it if still running after NUMBER seconds. SUFFIX may be 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days. 

PS. Если процесс синхронизации занимает слишком много времени, вы можете рассмотреть другой подход к синхронизации данных, возможно, заблокировать репликацию.

1
23.02.2017, 16:25
2 ответа
 $ pgrep -x ./hello_world
$ echo $? 
1 
 

Причина, по которой первое выражение выполняет Несоответствие вызвано тем, что вы просите pgrep искать точное совпадение имени процесса (в вашем примере имя процесса - hello_world ), но вы указываете ./ hello_world в качестве строки поиска.

 $ pgrep -x hello_world 
 $ echo $? 
1 
 

Я понятия не имею, почему второй поиск не работает для вас. Он работает на Ubuntu 14.04, поэтому либо в вашем сообщении есть какая-то ошибка, либо ошибка в новой версии:

$ ./dd &
[1] 6377
$ pgrep -x dd
6377
4
27.01.2020, 23:19

Похоже, что реализация pgrep -xи сопоставление регулярных выражений в procps нарушена:

$ /bin/sleep 9& pgrep -x 'sleep'
[1] 8472
8472
$ /bin/sleep 9& pgrep '^sleep$'
[2] 8485
8472
8485
$ 

Судя по моему чтению справочной страницы, оба они должны возвращать значение null.

Вместо этого рассмотрим pidof.


Существует досадный случай, когда нужно исключить скрипт-оболочку, в данном случае называемыйsleep:

#!//bin////bash
echo "Script PID: $$"
/bin/sleep 1&
pgrep -ax sleep

Вывод:

Script PID: 12973                              
12973 //bin////bash./sleep                    
12974 /bin/sleep 1 
0
27.01.2020, 23:19

Теги

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