더미 예로 터미널 탭에서 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.