"job" 명령은 중지된 작업을 볼 수 없습니다.

"job" 명령은 중지된 작업을 볼 수 없습니다.

bg나는 " ", " fg" 및 " jobs" 명령을 연습하기 위해 매우 간단한 쉘 스크립트를 작성했습니다 .

#!/bin/bash

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

SecureCRT를 사용하여 우분투 시스템에 연결합니다. 이 컴퓨터에 연결된 여러 탭을 복제했습니다.

프로세스 pid를 가져와서 kill -19 pid일시 중단 하는 데 사용할 jobs때 해당 프로세스가 백그라운드 작업이 되었는지 확인하기 위해 실행합니다. 그렇습니다.

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

하지만 이상하게도 jobsSecureCRT의 다른 탭에서 명령을 실행하면 중지된 작업이 표시되지 않습니다.

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

누구든지 나에게 설명해 줄 수 있나요?

답변1

일은 공허한 개념이다. 작업은 셸이 추적하는 셸의 하위 프로세스입니다. 하나의 터미널에서 실행되는 쉘 인스턴스는 다른 쉘 인스턴스의 작업에 대해 아무것도 모릅니다. jobs터미널 에뮬레이터의 두 번째 탭에서 실행되는 셸을 실행 하면 다음의 작업이 나열됩니다.저것껍데기. 두 번째 탭에서 실행되는 셸은 첫 번째 탭에서 실행되는 작업에 대해 아무것도 모릅니다.

작업은 프로세스이므로 프로세스를 조작할 수 있습니다. 작업의 프로세스 ID를 식별해야 합니다. 프로세스 ID는 커널 개념입니다. 프로세스 ID는 특정 시간에 특정 시스템의 프로세스를 고유하게 식별합니다. 실행하여 ps -t pts/42터미널에서 실행 중인 프로세스를 나열 할 수 /dev/pts/42있습니다. tty셸에서 명령을 실행하여 실행 중인 터미널을 확인할 수 있습니다. (이것은 터미널이며 터미널 에뮬레이터 소프트웨어가 아닙니다. 멀티탭 터미널 에뮬레이터의 탭은 터미널과 관련이 없습니다.)

관심 있는 프로세스의 프로세스 ID를 결정한 후에는 이 kill명령을 사용하여 신호를 보낼 수 있습니다. 프로세스가 일시 중지된 경우 SIGCONT 신호는 프로세스에 실행을 재개하라고 지시합니다(일시 중지되지 않은 경우 신호는 아무 작업도 수행하지 않음). 프로세스는 백그라운드에서 실행됩니다. 프로세스를 포그라운드로 가져오려면 fg해당 터미널에서 실행 중인 쉘의 명령을 사용하여 수행해야 합니다(쉘이 포그라운드를 삭제하도록 해야 하기 때문).

1 프로세스 그룹의 작업을 선별할 수 있지만 이는 중요하지 않습니다.

관련 정보