Como cancelar o próximo trabalho em ordem após o rsync

Como cancelar o próximo trabalho em ordem após o rsync

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 htopou ps axfe matar oprocesso pai de job1e não o próprio job1.


Instalar htopcom

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 rsynccomando. 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 sudosenha, 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 sua sudosolicitaçã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/shutdowncomando para remover +xou apenas renomeie-o com um nome diferente.

informação relacionada