kill
não está lendo nada de stdin, mas espera alguns argumentos de linha de comando e lança um erro se não os obtiver.
O encanamento só funciona se o programa no lado direito do tubo estiver realmente lendo do tubo. Nem todos os programas fazem.
Estou brincando com canos para aprender como usá-los.
Eu estou tentando este comando para matar um processo pelo nome: pgrep <some_process> | kill
mas a saída que estou recebendo é a instrução de uso para kill, como se ela não tivesse recebido nenhuma entrada.
é claro que sei que há uma maneira mais fácil de realizar a mesma tarefa como pkill
ou killall
, mas quero saber por que isso não está funcionando.
Obrigado
kill
não está lendo nada de stdin, mas espera alguns argumentos de linha de comando e lança um erro se não os obtiver.
O encanamento só funciona se o programa no lado direito do tubo estiver realmente lendo do tubo. Nem todos os programas fazem.
Como Florian explicou, kill
espera entradas de linha de comando.
Para contornar o problema, você pode usar
xargs
para criar argumentos de linha de comando para um comando, por exemplo, pgrep vivaldi | xargs kill
ou melhor ainda pgrep vivaldi | awk 'BEGIN{ORS=" "} 1' | xargs kill
kill $(pgrep vivaldi)
killall
, que faz praticamente o mesmo trabalho que pgrep e kill combinados, por exemplo, killall vivaldi
pkill
, outro utilitário para matar com base no nome, por exemplo, pkill vivaldi
Para matar um programa pelo nome, se você realmente souber o nome do processo, basta usar o comando skill <your process name>
;
Agora, para canais, uma boa maneira de entendê-los é brincar com ferramentas como echo
, more
, less
, tail
, head
etc. Há muitos programas que podem ser lidos um cachimbo ... um que eu sempre usei é grep
.