현재 사용자가 모든 셸 세션(현재 셸뿐만 아니라)의 모든 작업을 나열합니다.

현재 사용자가 모든 셸 세션(현재 셸뿐만 아니라)의 모든 작업을 나열합니다.

jobs이 명령은 현재 셸 세션에서 실행 중인 작업만 표시한다는 것을 알고 있습니다 .

셸 세션 전체에서 현재 사용자의 작업(예: 다른 터미널 탭의 작업)을 표시할 수 있는 bash 코드가 있습니까?

답변1

jobs현재 사용자( )가 소유한 모든 프로세스를 나열하는 것 외에 이 전역 호출이 수행하려는 작업이 무엇인지는 확실하지 않지만 ps x터미널 및/또는 상태별로 목록을 필터링할 수 있습니다.

프로세스를 나열하십시오.

  • 아무 터미널에나 연결하세요:ps x |awk '$2 ~ /pts/'
  • 작업 제어로 인해 중지됨( Ctrl+ z없음 bg):ps x |awk '$3 ~ /T/'
  • 포그라운드에서 실행:ps x |awk '$3 ~ /\+/'

AWK정말 강력합니다. 여기서는 필드를 숫자로 호출하고 $정규식 일치자( )를 사용하여 해당 값을 확인합니다 ~. 역 매칭을 사용할 수 있습니다 !~. 조건은 다음과 같습니다. 우리는 AWK의 기본 동작(일치 항목을 인쇄하며 { print $0 }전체 행을 인쇄하도록 작성할 수도 있음)을 사용하고 있습니다.

AWK 명령에 헤더 'NR == 1 || …(레코드 수 = 1, 행 1이라고도 함)를 추가할 수 있습니다. 예를 들어 이들은 결합될 수 있습니다 ps x |awk 'NR == 1 || $3 ~ /T/ || $2 ~ /pts/. 정규식을 사용하면 처음 두 개의 글머리 기호를 로 결합할 수 있습니다 ps x |awk '$3 ~ /[T+]/'. 이러한 조건문은 논리적이므로 및 괄호로 결합할 수 있습니다 ||.&&ps x |awk 'NR == 1 || ($3 ~ /\+/ && $2 ~ /pts/)'

나는 당신이 원하는 것이 다음과 같다고 생각합니다.ps x |awk 'NR == 1 || $2 ~ /pts/

나는 이것을 Linux 시스템에서 실행했습니다. 다른 프로그램을 실행하는 경우 터미널 에뮬레이터의 이름이 다를 수 있습니다. 실행하여 ps $$활성 쉘이 목록에 어떻게 나타나는지 확인하고 두 번째 열에서 정규식을 작성하십시오.

관련 정보