Каждый процесс будет указан в выводе ps aux
; будь то бег, сон, зомби или остановка.
Тем не менее, в вашем случае, поскольку вы запустили процесс с помощью sh abc.sh
, sh
это приложение (оболочка), которое работает, а не abc.sh
. Следовательно, ps aux
не будет содержать процесс, abc.sh
из-за которого grep
не может дать никакого результата.
Итак, правильный способ, которым вы должны были использовать это как:
ps aux | grep sh
Это также может вернуть вам другой процесс, который работает со строкой в sh
любом месте их вывода ps aux
.
Вы должны заметить, что процесс будет «запущен», когда на выходе ps aux
будет свой STAT
as R
. Если это что-то отличное от этого, оно не запускается в том случае, если вы запустили команду для проверки запущенных процессов. Различные состояния процесса можно найти на странице руководства для ps:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is being traced
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
Вы также можете запустить top
команду, чтобы проверить, запущен ли процесс или находится в спящем режиме, а также количество ресурсов процессора и оперативной памяти, которые он потребляет. (Это снова перечислит ваш процесс как sh
).
Однако, если вы хотите, чтобы ваш процесс был указан как abc.sh
, то у вас должна быть первая строка скрипта, который вы запускаете как:
#!/bin/sh
чтобы оболочка знала, какое приложение использовать для запуска сценария (в данном случае sh, измените его #!/bin/bash
на bash), а затем предоставьте исполняемые права доступа процессу, используя:
chmod +x /path/to/abc.sh
заменить /path/to/
на местоположение abc.sh
файла, а затем запустить abc.sh
с помощью
/path/to/abc.sh
снова заменив /path/to/
на расположение abc.sh
файла.
S+
означаетps aux | grep filename
команды.Моя проблема в
grep
том, что это целочисленный парсер. В вашем примере вы ищете «abc», но он возвращает экземплярgrep
(который ищет «abc»). Немного круговой Вы можете отфильтровать это, но я нахожу все это немного извращенным.Я бы обратился к
awk
небольшому размаху.awk
разбивает строки на поля на основе пробелов (по умолчанию). Поля $ 11 + являются столбцами команд, поэтому, если команда "sh abc.sh ...",$11
будетsh
и$12
будетabc.sh
.Если вы хотите контролировать выход или цепочку с помощью Bash
&&
и||
операторов, вы можете, но вам нужно быть немного умнее.grep
выйдет с кодом состояния 1 (технический сбой, триггеры||
), если ничего не найдено, ноawk
всегда выйдет из кода 0. Мы можем изменить это, сказав ему выйти, если он что-то найдет, и бросить 1, если этого не произойдет:Конечно, если вы просто хотите записать вывод на экран, вы можете сделать все это
awk
:источник
Правильный способ проверить в текущем сеансе bash, запущен ли фоновый процесс, например
sh abc.sh &
, уже запущен или нет, - использоватьjobs
встроенную команду.Пример:
Это означает, что
sh abc.sh
процесс, запущенный в фоновом режиме, выполняется. Если процесс завершен, вы увидите что-то вроде:Если в фоновом режиме запущено больше процессов, вы можете ограничить вывод только
sh abc.sh
процессом, используя:Смотрите
help jobs
для получения дополнительной информации.Вышеуказанный метод будет работать только в текущей сессии bash. Но если вы находитесь в другом сеансе bash (например, в другом окне терминала или вкладке или в скрипте), кроме:
Вы также можете использовать:
что кажется мне более простым. Если вы увидите введенную команду в выводе (
sh abc.sh
в данном случае), это означает, что процесс все еще выполняется. Если нет, процесс завершен.источник
Если ваш скрипт в данный момент запущен, он должен быть показан
ps aux
командой. Если это не показаноps
, то, возможно, выполнение вашего скрипта в данный момент прекращено.Вывод
ps
как это означает, что ваш скрипт в данный момент не работает,Если это выглядит так, это означает, что ваш скрипт в данный момент выполняется.
Все основано на содержании сценария.
Например, если вы создаете такой скрипт, как этот. Отображает сообщение HI о выполнении. Отображение выходных данных занимает несколько секунд, и после получения окончательного результата оно завершается.
Но если ваш сценарий такой,
Требуется несколько минут, чтобы завершить процесс. В то же время, если вы запустите
ps aux | grep filename
команду, она будет показана на выходе. Потому что скрипт в данный момент запущен.источник
если вы хотите проверить все процессы, используйте 'top'
если вы хотите знать процессы, запускаемые Java, используйте
ps -ef | grep java
если другой процесс, то просто используйте
ps -ef | grep xyz
или просто/etc/init.d xyz status
если через любой код, как
.sh
тогда./xyz.sh status
источник
если вы просто хотите проверить, находится ли какой-либо процесс в процессе, перейдите в этот каталог и введите
ll -tr
, видите ли вы.csv
или что-то еще.work
в конце файла, тогда это означает, что в процессе нет.источник
.csv
предназначено для файлов с разделителями-запятыми, которые не связаны с запущенным процессом.