shell script para verificar se um processo está ativo

0

Quero verificar se um processo está funcionando:

[nyxqa@qckmaccg102 scripts]$  ps -fu nyxqa
UID        PID  PPID  C STIME TTY          TIME CMD
nyxqa    19620     1  0 08:42 ?        00:00:00 ./ArcaDirect ITD
nyxqa    19628     1  0 08:42 ?        00:00:00 ./ADViewerWebOps

Eu quero ver se o processo ArcaDirect ITD está usando o shell

    
por Test priya 16.08.2015 / 04:57

2 respostas

3

Veja man pgrep . já que não tenho ArcaDirect , mas tenho NetworkManager

(0)$ pgrep NetworkManager
1400
(0)$ pgrep ArcaDirect
(1)$ 

Isso é o que eu digitei no terminal

(0)$ pgrep NetworkManager
4011
(0)$ pgrep ArcaDirect
(1)$ if  $(pgrep NetworkManager >/dev/null)  ; then
  echo "Running"
  else
  echo "Restart needed"
  fi
Running
(0)$ if  $(pgrep ArcaDirect >/dev/null)  ; then echo "Running"; else echo     "Restart needed"; fi
Restart needed
(0)$ 
    
por waltinator 16.08.2015 / 05:32
1

Assumindo que up significa que, se um processo estiver em execução no momento da verificação.

Você pode usar ps (como você mencionou) ou pgrep , já que você deseja usá-lo em um script, eu sugiro que você use pgrep por sua simplicidade.

Por exemplo, vamos verificar se firefox está em execução:

$ pgrep firefox  ## Firefox is running, Shows the PID of firefox
17032

$ echo "$?"  ## Exit status is 0 (One (or more) matched process(es) found)
0


$ pgrep firefox  ## Firefox is Not running, Shows nothing

$ echo "$?"  ## Exit code in this case is 1
1

No entanto, há uma captura muito importante, em sua forma padrão pgrep corresponde ao nome dado como padrão de expressão regular em relação aos nomes de processo. Portanto, se um processo tiver um nome como firefox_foobar e você tentar verificar se firefox está sendo executado por pgrep firefox , ele mostrará o PID do processo firefox_foobar . Portanto, você teria a ideia de que firefox está em execução, mas na verdade não é.

Aqui está um exemplo:

$ pgrep firefox_foobar
19002

$ pgrep firefox
19002

Para superar esse problema, você deve corresponder ao nome exato do processo usando a opção -x de pgrep :

$ pgrep -x firefox_foobar  ## Shows the PID of firefox_foobar
19002

$ pgrep -x firefox  ##Shows nothing as firefox is not running

Então, em poucas palavras, o seu script pode assumir a forma:

if pgrep -x 'ArcaDirect ITD' &>/dev/null; then echo "Running"; else echo "Not running"; fi
    
por heemayl 16.08.2015 / 21:30