Estou executando um processo de nohup no servidor. Quando tento matá-lo, meu console de massa fecha.
é assim que eu tento encontrar o ID do processo:
ps -ef |grep nohup
este é o comando para matar
kill -9 1787 787
Estou executando um processo de nohup no servidor. Quando tento matá-lo, meu console de massa fecha.
é assim que eu tento encontrar o ID do processo:
ps -ef |grep nohup
este é o comando para matar
kill -9 1787 787
Respostas:
Ao usar nohup
e você colocar a tarefa em segundo plano, o operador em segundo plano ( &
) fornecerá o PID no prompt de comando. Se seu plano é gerenciar manualmente o processo, você pode salvar esse PID e usá-lo mais tarde para finalizar o processo, se necessário, via kill PID
ou kill -9 PID
(se precisar forçar a finalização). Como alternativa, você pode encontrar o PID posteriormente ps -ef | grep "command name"
e localizá-lo a partir daí. Observe que a nohup
palavra-chave / comando em si não aparece na ps
saída do comando em questão.
Se você usou um script, pode fazer algo como:
nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt
Isso será executado, my_command
salvando toda a saída my.log
(em um script, $!
representa o PID do último processo executado). O 2
é o descritor de arquivo para o erro padrão ( stderr
) e 2>&1
diz ao shell para encaminhar saída de erro padrão para a saída padrão (descritor de arquivo 1
). Requer &1
que o shell saiba que é um descritor de arquivo nesse contexto, em vez de apenas um arquivo chamado 1
. O 2>&1
é necessário para capturar as mensagens de erro que normalmente são escritos para o erro padrão para o nossomy.log
arquivo (que é proveniente de saída padrão). Consulte Redirecionamento de E / S para obter mais detalhes sobre como lidar com o redirecionamento de E / S com o shell.
Se o comando enviar a saída regularmente, você poderá verificar a saída ocasionalmente com tail my.log
, ou se desejar segui-la "ao vivo", poderá usar tail -f my.log
. Por fim, se você precisar interromper o processo, poderá fazê-lo via:
kill -9 `cat save_pid.txt`
rm save_pid.txt
nohup
per se, que imprime o PID, é a final &
que fundos de TI, por exemplo, ls &
iria mostrar o PID para a execuçãols
2
é o descritor de arquivo "erro padrão". >
é o redirecionamento do shell e &1
é o descritor de arquivo "saída padrão" ( &
é necessário aqui para que o shell não pense que estou me referindo a um arquivo chamado 1
). Então, 2 > &1
redireciona qualquer saída de erro padrão para a entrada padrão. Como os > my.log
meios anteriores para redirecionar a saída padrão para my.log
, precisamos de uma maneira de garantir que as mensagens de erro também sejam acessadas my.log
. 2 > &1
garante que esses erros vão para a saída padrão, que por sua vez vai para my.log
. Veja I / O redirecionamento .
echo $!
dá-me o pid de nohup em vez do processo gerado: paste.fedoraproject.org/428697/99695314
&
atua como um delimitador de comandos para que você possa tentar sh -c "nohup my_command > my.log 2>&1 & echo $! > save_pid.txt"
,. Pode funcionar, mas não tentei.
Estou usando o red hat linux em um servidor VPS (e via SSH - putty), para mim o seguinte funcionou:
Primeiro, você lista todos os processos em execução:
ps -ef
Então, na primeira coluna, você encontra seu nome de usuário; Encontrei o seguinte três vezes:
Em seguida, na segunda coluna, você pode encontrar o PID do processo de nohup e digitar apenas:
kill PID
(substituindo o PID pelo PID do processo de nohup, é claro)
E é isso aí!
Espero que esta resposta seja útil para alguém que também sou muito novo no bash e no SSH, mas encontrei 95% do conhecimento necessário aqui :)
suponha que eu esteja executando o script ruby em segundo plano com o comando abaixo
nohup ruby script.rb &
então eu posso obter o pid do processo em segundo plano, especificando o nome do comando. No meu caso, o comando é ruby.
ps -ef | grep ruby
resultado
ubuntu 25938 25742 0 05:16 pts/0 00:00:00 ruby test.rb
Agora você pode facilmente matar o processo usando o comando kill
kill 25938
ps -ef
e kill
foram ambos bem abordados acima, então qual é a nova parte?
jobs -l deve fornecer o pid para a lista de processos nohup. mate (-9) com cuidado. ;)
kill -9
menos que você saiba que sinais regulares não funcionam.
Você poderia tentar
kill -9 `pgrep [command name]`
pkill [command name]
você pode usar a -o
bandeira para matar o processo de correspondência mais antigo ou -n
usar o mais novo.
Suponha que você esteja executando um programa java com nohup, para obter o ID do processo java
`ps aux | grep java`
resultado
xxxxx 9643 0.0 0.0 14232 968 pts/2
então você pode matar o processo digitando
sudo kill 9643
ou vamos dizer que você precisa matar todos os processos Java, basta usar
sudo killall java
esse comando mata todos os processadores java. você pode usar isso com o processo. basta fornecer o nome do processo no final do comando
sudo killall {processName}
Iniciei o servidor django com o seguinte comando.
nohup manage.py runserver <localhost:port>
Isso funciona no CentOS:
:~ ns$netstat -ntlp
:~ ns$kill -9 PID
process not found
confusão com nohup.
Hoje eu encontrei o mesmo problema. E como foi há muito tempo, esqueci completamente qual comando eu usava e quando. Eu tentei três métodos:
ps -ef
comando Isso mostra a hora em que você inicia o processo e é muito provável que você não faça o comando antes de fechar o ssh (depende de você). Infelizmente, não acho que o comando mais recente seja o comando executado usando nohup; portanto, isso não funciona para mim.ps -ef
comando. Significa o ID do processo pai, o ID do processo que cria o processo. O ppid é 1 no ubuntu para processos que usam nohup para executar. Então você pode usarps --ppid "1"
para obter a lista e verificar TIME (o tempo total da CPU que seu processo usa) ou o CMD para encontrar o PID do processo.lsof -i:port
se o processo ocupar algumas portas e você receberá o comando. Então, assim como a resposta acima, use ps -ef | grep command
e você receberá o PID.Depois de encontrar o PID do processo, você pode usá-lo kill pid
para finalizar o processo.
nohup
e usá-lo posteriormente para okill
, ou encontrar o processo pelo nome do comando naps -ef
saída e obter o PID a partir dele. Você precisa procurar o nome do comando, nãonohup
.