Как проверить, что процесс уже запущен или нет

Keypass имеет встроенный генератор паролей. Создайте новый пароль и запомните его одним и тем же инструментом.

1
задан 13 April 2017 в 15:24

5 ответов

Моя проблема с grep заключается в том, что это синтаксический анализатор целых строк. В вашем примере вы ищете «abc», но он возвращает экземпляр grep (который ищет «abc»). Немного круговое. Вы можете отфильтровать это, но я нахожу все, что немного извращено.

Я немного обратился к awk.

ps aux | awk '$12=="abc.sh"'

awk разбивает строки на поля на основе пробелов (по умолчанию). Поля $ 11 + являются столбцами команд, поэтому если команда «sh abc.sh ...», $11 будет sh, а $12 будет abc.sh.

Если вы хотите контролировать вывод или цепочку с помощью операторов && и || Bash, вы можете, но вам нужно быть немного умнее. grep выйдет со статусом 1 (технический сбой, триггеры ||), если ничего не найдено, но awk всегда выйдет из кода 0. Мы можем изменить это, сказав ему выйти, если он что-то найдет, и выбросить 1, если это не:

ps aux | awk '$12=="abc.sh" {exit 0} END{exit 1}' && echo running || echo not running

Конечно, если вы просто заботитесь о записи вывода на экран, вы можете сделать это все в awk:

ps aux | awk '$12=="abc.sh" {print "running"; exit} END{print "not running"}'
5
ответ дан 24 May 2018 в 07:12

Если ваш скрипт в настоящий момент запущен, он должен быть показан командой ps aux.

Вывод ps, как это означает, что ваш скрипт в настоящий момент не запущен,

$ ps aux | grep hm.sh
avinash   6386  0.0  0.0  15940   932 pts/16   S+   17:34   0:00 grep --color=auto hm.sh

Если это так, то это означает, что ваш скрипт в настоящий момент запущен.

$ ps aux | grep hm.sh
avinash   6454  0.0  0.0  16616  1384 pts/16   S+   17:35   0:00 /bin/bash ./hm.sh
avinash   6535  0.0  0.0  15940   932 pts/27   R+   17:35   0:00 grep --color=auto hm.sh

Все это основано на содержимом скрипта.

Например, если вы создаете сценарий вроде этого. Он отображает сообщение HI при выполнении.

#!/bin/bash
echo "HI"

Но если ваш скрипт похож на этот,

#!/bin/bash
sudo apt-get update

Требуется несколько минут, чтобы отобразить вывод и завершился после его окончательного результата. чтобы завершить процесс. Тем временем, если вы запустите команду ps aux | grep filename, она будет показана на выходе. Поскольку скрипт в настоящее время запущен.

3
ответ дан 24 May 2018 в 07:12

Правильный способ проверить текущий сеанс bash, если процесс, запущенный в фоновом режиме, например sh abc.sh &, уже запущен или нет, заключается в использовании встроенной команды jobs.

Пример:

$ sh abc.sh &
[1] 6917
$ jobs
[1]+  Running                 sh abc.sh &

Это означает, что процесс sh abc.sh запущен в фоновом режиме. Если процесс завершен, вы увидите что-то вроде:

[1]+  Done                    sh abc.sh

Если у вас больше процессов, работающих в фоновом режиме, вы можете ограничить вывод только процессом sh abc.sh, используя:

См. help jobs для получения дополнительной информации.

Вышеуказанный метод будет работать только в текущем сеансе bash. Но если вы находитесь в другом сеансе bash (например, в другом окне терминала или вкладке или в скрипте), кроме:

ps aux | grep "[s]h bin/test.sh"

вы также можете использовать:

pgrep -a sh
[d7 ], который кажется мне более простым. Если вы увидите введенную команду на выходе (sh abc.sh в этом случае), это означает, что процесс все еще запущен. Если нет, процесс завершен.

3
ответ дан 24 May 2018 в 07:12

, если вы просто хотите проверить, есть ли какой-либо процесс, перейдите в этот каталог и введите ll -tr, если вы видите .csv или .work и т. д. в конце файла, а это значит, что в процессе иначе нет.

0
ответ дан 24 May 2018 в 07:12
, если вы хотите проверить все процессы, затем используйте «верх», если хотите знать процессы, запускаемые java, затем используйте ps -ef | grep java, если другой процесс затем просто используйте ps -ef | grep xyz или просто /etc/init.d xyz status, если через любой код, например , тогда ./xyz.sh status
-1
ответ дан 24 May 2018 в 07:12
  • 1
    -1 Хотя эти команды полезны при некоторых обстоятельствах, они все равно будут бесполезны для тех, кто не знает этих обстоятельств. В каждом случае вы либо не объясняете их достаточно, либо ваше объяснение неверно. – David Foerster 24 May 2016 в 10:47

Другие вопросы по тегам:

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