다른 쉘 인스턴스의 서브쉘에서 bg를 통해 제출된 작업을 종료하는 방법은 무엇입니까?

다른 쉘 인스턴스의 서브쉘에서 bg를 통해 제출된 작업을 종료하는 방법은 무엇입니까?

더미 예로 터미널 탭에서 bash 명령을 실행한다고 가정해 보겠습니다.

$: sleep 1000 &

그런 다음 다른 탭에서 "모든 백그라운드 작업을 종료"하는 명령을 실행합니다.

$: jobs -p | xargs -a kill

빼고는 아무 일도 일어나지 않습니다. 또는 더 나은 방법은: 어떤 컨텍스트를 통해 사용자가 <some-job> &시작한 모든 작업을 어떻게 나열할 수 있습니까?

답변1

jobs명령은 쉘 내장이므로 현재 쉘 인스턴스화에만 적용됩니다. 특히 Bash 매뉴얼은 다음을 설명합니다 jobs.

-p 프로세스 ID만 나열업무프로세스팀장.

(강조합니다.)

을 실행하면 jobs -l다른 셸의 백그라운드에서 실행 중인 sleep도 나열되지 않는 것을 볼 수 있습니다.

명령 나열모두흐름은 입니다 ps. 매개변수 구문은 약간 바로크적일 수 있으므로 man ps직접 확인하는 것이 좋습니다. 나 자신의 경우 보통 다음 중 하나를 사용합니다.

ps aux
ps axjf

하나는 모든 프로세스의 목록을 제공하고 다른 하나는 종속성 트리 형식으로 정렬합니다. pgrep이름과 일치하는 특정 프로세스를 찾는 방법으로 이를 시도해 볼 수도 있습니다 .

참고로 보안 문제가 있는 환경에서 작업하는 경우 루트 사용자에게도 프로세스를 숨기는 은밀한 방법이 있다는 점에 유의하세요. 예를 참조하세요.https://github.com/gianlucaborello/libprocesshider.

관련 정보