Como matar um processo com um único comando?


18

Eu quero matar um processo, depois de encontrar o ID em uma única etapa.

Atualmente, uso esses dois comandos:

pidof <name>
kill <#number_which_is_result_of_command>

Como posso escrever um único comando para fazer isso?


Que concha? bash? tcsh? ...?
Levon

2
Você pode procurar a substituição de comandos na documentação do seu shell.
deviantkarot

2
Eu mato as coisas visualmente usando: xkill. Basta digitar xkill no Terminal, mover o cursor para o aplicativo ofensivo e pressionar o botão.Gone

11
@arochester Isso funciona, mas está restrito aos ambientes da GUI, a killvariedade de comandos funcionará no console (além de poder ser automatizada em scripts etc). Ainda é bom conscientizar as pessoas sobre a xkillopção.
Levon

Se uma das respostas abaixo resolveu seu problema, considere aceitá-lo clicando na marca de seleção ao lado da resposta. Ele recompensará ambas as partes com alguns pontos de representação e marcará esse problema como resolvido.
Levon

Respostas:


18

Você também pode matar processos pelo nome:

Exemplo:

pkill vim  # kill all processes containing vim in the process name

@Levon Você tem certeza? Dica: funcionará se você mudar pkillpara kill?
23412 Mikel

Não vai funcionar, Levon. kill -9 mata o processo por seu PID e pkill -9 mata o processo por seu nome.
fromnaboo

6
Sem -oou -n, pkilltambém mata todos os processos correspondentes, não apenas um.
23412 Mikel

3
-1 por sugerir o uso de SIGKILL (-9), que é uma ecologia de processo ruim. Com o SIGKILL, os dados do processo não são liberados, criando uma possível corrupção de dados.
Arcege

6
Sugerir killallé MUITO RUIM CONSELHOS. Ele faz coisas muito diferentes, dependendo do Unix / Linux em que você está.
MikeyB

13

Para responder sua pergunta específica com seu conjunto de comandos, use:

kill `pidof <name>`

Como pidof <name>fornece o PID do processo que você está tentando matar, você pode usá-lo com opções de linha de comando, como -9etc também.

Testado com bashe tcsh.


9
BTW, kill $(pidof <name>)é mais compatível (POSIX) e pode ser usado dentro de outro bloco de substituição de comando .
Rudolf Adamkovic

@RudolfAdamkovic Concordo, essa é uma opção melhor, com certeza nos scripts. No entanto, para um comando de digitação rápida, acho mais fácil usar os backticks .. além de funcionar com os dois shells comuns (bash e tcsh) .. Não consegui que a $versão funcionasse com o tcsh.
Levon

Apenas tentei tcshe você está certo. Não sabia disso. Obrigado pela informação!
Rudolf Adamkovic

7

Deve ser um comentário sobre o Levon, mas não tenho o representante aqui para fazer isso:

Analisando a discussão na resposta aceita desta pergunta: /server/397762/how-to-make-folders-00-99-with-a-singsing-command-in-ubuntu

Eu diria que poderia ser preferível (ou pelo menos útil / mais claro para os pesquisadores posteriores) executar

kill $(pidof <name>)

Referência adicional em $ () vs. ``: http://mywiki.wooledge.org/BashFAQ/082


+1 por incluir especialmente o link inferior. Recebi um comentário semelhante de @RudolfAdamkovic, veja minha resposta a ele. Você conhece uma versão disso que funciona com o tcsh? (Eu continuo a achar backticks mais fácil de digitar em um comando rápido na casca :)
Levon

Eu trabalhei apenas com o bash (no Linux) & ksh (no HP-UX); ainda não cruzei o caminho com o tcsh, desculpe.
Ghillie Dhu

1

Você também pode usar o killallcomando para matar o processo específico.

killall vim
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.