Todo processo será listado na saída de ps aux
; seja correndo, dormindo, zumbi ou parado.
No entanto, no seu caso, desde que você executou o processo usando sh abc.sh
, sh
é o aplicativo (shell) que está sendo executado e não abc.sh
. Portanto, ps aux
não conterá o processo abc.sh
por causa do qual grep
não poderia resultar em nenhum resultado.
Portanto, a maneira correta de usá-lo é como:
ps aux | grep sh
Isso também pode retornar outro processo em execução, com a string sh
em qualquer lugar na saída de ps aux
.
Você deve observar que o processo estará "em execução" quando a saída de ps aux
tiver STAT
como R
. Se for algo diferente disso, não está sendo executado na instância em que você acionou o comando para verificar os processos em execução. Os diferentes estados do processo podem ser encontrados na página de manual do 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
Você também pode executar o top
comando para verificar se o processo está em execução ou em suspensão e a quantidade de CPU e RAM que está consumindo. (Isso listará novamente seu processo como sh
).
No entanto, se você deseja que seu processo seja listado como abc.sh
, deve ter a primeira linha do script que está executando como:
#!/bin/sh
para que o shell saiba qual aplicativo será usado para executar o script (sh, neste caso, altere-o #!/bin/bash
para bash) e forneça permissões executáveis ao processo usando:
chmod +x /path/to/abc.sh
substituindo /path/to/
pela localização do abc.sh
arquivo e, em seguida, execute abc.sh
usando
/path/to/abc.sh
substituindo novamente /path/to/
pelo local do abc.sh
arquivo.
S+
significaps aux | grep filename
comando.Meu problema
grep
é que é um analisador de linha inteira. No seu exemplo, você está procurando "abc", mas está recuando a instância degrep
(que está procurando "abc"). Um pouco circular. Você pode filtrar isso, mas acho tudo isso um pouco perverso.Eu procuraria
awk
um pouco de panache.awk
divide as linhas em campos com base em espaço em branco (por padrão). Os campos $ 11 + são as colunas de comando, portanto, se o comando for "sh abc.sh ...",$11
serásh
e$12
seráabc.sh
.Se você deseja controlar a saída ou encadear com Bash's
&&
e||
operadores, pode, mas precisará ser um pouco mais inteligente.grep
sairá com o código de status 1 (falha técnica, gatilhos||
) se nada for encontrado, masawk
sempre sairá do código 0. Podemos mudar isso dizendo para sair se encontrar algo e lançar 1 se não encontrar:Obviamente, se você se importa apenas em escrever a saída na tela, você pode fazer isso em
awk
:fonte
A maneira correta de verificar na sessão atual do bash se um processo iniciado em segundo plano, como
sh abc.sh &
, já está sendo executado ou não, é usar ojobs
comando builtin.Exemplo:
Isso significa que o
sh abc.sh
processo iniciado em segundo plano está em execução. Se o processo terminar, você verá algo como:Se você tiver mais processos em execução em segundo plano, poderá restringir a saída apenas ao
sh abc.sh
processo usando:Veja
help jobs
para mais informações.O método acima funcionará apenas na sessão atual do bash. Mas se você estiver em outra sessão do bash (por exemplo, em outra janela ou guia do terminal ou em um script), além de:
você pode usar também:
o que me parece mais simples. Se você vir seu comando digitado na saída (
sh abc.sh
neste caso), isso significa que o processo ainda está em execução. Caso contrário, o processo foi concluído.fonte
Se o seu script estiver em execução no momento, ele deverá ser mostrado por
ps aux
comando. Se não for mostrado porps
, pode haver uma execução de script finalizada no momento.Saída
ps
como essa significa que seu script não está em execução no momento,Se aparecer assim, significa que seu script está em execução no momento.
É tudo baseado no conteúdo do script.
Por exemplo, se você criar um script como este. Ele exibe a mensagem HI em execução. Demora alguns segundos para exibir a saída e foi finalizada depois que produz o resultado final.
Mas se o seu script assim,
Demora alguns minutos para finalizar o processo. Enquanto isso, se você executar o
ps aux | grep filename
comando, ele será mostrado na saída. Porque o script está em execução no momento.fonte
se você quiser verificar todos os processos, use 'top'
Se você quiser conhecer os processos executados por java, use
ps -ef | grep java
se outro processo, basta usar
ps -ef | grep xyz
ou simplesmente/etc/init.d xyz status
se através de qualquer código como
.sh
então./xyz.sh status
fonte
se você simplesmente deseja verificar se há algum processo em andamento, vá para esse diretório e digite
ll -tr
se você vê.csv
ou.work
etc no final do arquivo, então isso significa que está em processo ou não.fonte
.csv
é para arquivos delimitados por vírgula que não estão relacionados a um processo em execução.