o comando "jobs" não pode ver os jobs parados

0

Eu escrevi um script de shell muito simples para praticar o comando " bg ", " fg " e " jobs ":

#!/bin/bash

myvar=1
while [ $myvar -le 100000000 ]
do
    echo $myvar
    myvar=$(( $myvar + 1 ))
done

Eu uso o SecureCRT para conectar uma máquina Ubuntu. Eu tenho clonado várias abas que estão conectadas a esta máquina.

Quando obtenho o processo pid e uso kill -19 pid para suspendê-lo, e eu corro jobs para ver se ele se tornou um trabalho em segundo plano, sim, é:

imcas@ubuntu:/home/wuchang$ jobs
[1]+  Stopped                 bash testShell

mas o que é estranho é que, quando executo o comando jobs em outra guia do SecureCRT, não consigo ver o trabalho interrompido:

imcas@ubuntu:/$ jobs
imcas@ubuntu:/$ jobs
imcas@ubuntu:/$ 

Alguém pode explicar isso para mim?

    
por wuchang 10.12.2014 / 08:10

1 resposta

1

Jobs são um conceito de shell. Um job é um subprocesso de um shell que o shell rastreia. Uma instância de shell em execução em um terminal não sabe nada sobre as tarefas de outra instância de shell. Quando você executa jobs no shell que está sendo executado na segunda guia do seu emulador de terminal, isso lista os jobs no shell that . O shell em execução na segunda guia não sabe nada sobre as tarefas em execução na primeira guia.

Jobs são processos, então você pode manipulá-los como tal. Você precisará identificar o ID do processo do trabalho. IDs de processo são um conceito de kernel; um ID de processo identifica exclusivamente um processo em uma determinada máquina em um determinado momento. Você pode executar ps -t pts/42 para listar os processos em execução no terminal /dev/pts/42 ; execute o comando tty em um shell para ver em qual terminal está sendo executado. (Isso é terminal, não software de emulador de terminal. Guias em um emulador de terminal multi-tab são terminais não relacionados.)

Depois de identificar o ID do processo em que você está interessado, envie um sinal com o comando kill . O sinal SIGCONT diz ao processo para retomar a execução, caso tenha sido suspenso (se não foi suspenso, o sinal não faz nada). O processo será executado em segundo plano; Se você quiser trazê-lo para o primeiro plano, você precisa fazer isso com o comando fg no shell que está sendo executado naquele terminal (porque você precisa fazer com que o shell pare de estar em primeiro plano).

¹ Você pode precisar que empregos são grupos de processos, mas isso é irrelevante aqui.

    
por 11.12.2014 / 00:10