
Se dois trabalhos forem inseridos na linha de comando do bash separados por ponto e vírgula:
$ job 1; job 2;
Como faço para cancelar o segundo? Se eu pressionar CTRL+ c, o primeiro será cancelado e o 'job 2' será iniciado, só quero parar o segundo trabalho para não ser executado. Eu tentei atq, ps mas sem sorte, com ps -ef consigo ver apenas 'trabalho 1', mas 'trabalho 2' não está listado, então não consigo fazer o PID usar kill. Eu sei que posso usar && em vez de ; mas agora é tarde demais, executei esse comando acidentalmente no meu servidor, em vez de no meu PC doméstico, e agora estou tentando descobrir como evitar um desastre.
Este problema é específico do comando rsync seguido por outro comando:
$ rsync ..... ; sudo shutdown -h now
Matar o processo por ID ou matar seu pai não funcionará.
Depois de várias horas de testes, isolei-o para rsync, outros comandos consigo finalizar com CTRL+ cem várias ordens, mas não se estiverem após alguns comandos como rsync ou ping, tentei diferentes versões do Ubuntu, kernels, servidor sem usuário sudo e eu poderia reproduzi-lo em qualquer lugar, a melhor maneira de evitar esse problema é usar && após o rsync para executar o seguinte comando somente em caso de sucesso do código de saída 0:
$ rsync .... && job 2
Responder1
Matar oprocesso paide job1 com SIGKILL
.
Mostre os processos em uma árvore de processos, por exemplo. com htop
ou ps axf
e matar oprocesso pai de job1e não o próprio job1.
Instalar htop
com
sudo apt-get install htop
Votantes negativos, entendam a resposta antes de votar negativamente
Responder2
Acho que você perdeu alguma coisa. Quando você executa dois comandos separados por ;
você pode matar os dois comandos pelo CTRL+ c.
só para ter certeza, tente este comando:
find / -name a ; ls /home
Em seguida, elimine os comandos acima com CTRL+ c, isso mataria ambos os processos, você não listará o conteúdo da sua casa. Ou seja, o próximo comando não será executado.
ATUALIZAR:Isso também será válido para o seu rsync
comando. Aqui meu exemplo:
$ rsync -avz /var/cache/apt/archives/ /tmp/backups/ ; sudo shutdown -h now
sending incremental file list
created directory /tmp/backups
./
authbind_1.2.0build3_amd64.deb
................
^Crsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [sender=3.0.9]
[sudo] password for user:
Então, como você pode ver acima, quando você executa CTRL+ c, mata o primeiro comando e, ao iniciar o desligamento, ele solicitará sua sudo
senha, para que agora você possa encerrar o segundo processo usando CTRL+ cnovamente.
Atualização 2Como um hack para o problema, você pode fazer:
- já que você usa sem senha
sudo
, faça novamente suasudo
solicitação de senha editando seu arquivo sudoersudo visudo
- Como etapa final, se nada mais funcionare apenas um hack e não é aconselháveledite o
/sbin/shutdown
comando para remover+x
ou apenas renomeie-o com um nome diferente.