나는 최근에 프로세스리스트 (또는 단일 프로세스의 경우 pid
)에 대해 shell
의 이름을 찾아야하는 상황에 처해있다. 우리가 그것을 찾을 수있는 방법이 있습니까 (바람직하게는 ps
및 grep
명령을 사용).linux에서 프로세스를 실행하는 데 사용 된 셸을 찾으십시오.
답변
프로세스가 쉘에서 시작되었다는 것을 알고 있으므로 프로세스 ID가 ps
, e를 사용하여 얻을 수있는 상위 프로세스의 명령 이름을 찾아야합니다. e. 지. OUTPUT FORMAT CONTROL 옵션이 oppid
인 경우.
for pid in ${list[*]}; do echo -n $pid:; ps p`ps p$pid hoppid` hocomm; done
상세
for pid in ${list[*]}; do …; done
…
차례로 각 요소 (공정 ID)의 가변 pid
list
세트의 각 요소에 대해 한번 실행되는 명령. Looping Constructs을 참조하십시오.
구조체 ${list[*]}
은 list
의 모든 요소로 확장됩니다. list
이 배열 변수 (예 : list=(1234 5678)
으로 설정) 과 인 경우 이 공백으로 구분 된 요소 (예 : list="1234 5678"
으로 설정)를 가진 간단한 변수 인 경우 bash
에서 작동합니다. Shell Parameter Expansion 및 Arrays을 참조하십시오.
echo -n $pid:
출력 e. 지. 1234:
에 개행 문자가 없으므로 다음 출력이 :
바로 뒤에 표시됩니다. Bash Builtin Commands을 참조하십시오.
ps p$pid hoppid
로세스 선택 옵션 p
정보 $pid
이 경우에 도시 될되는 프로세스 (들)를 선택한다.
출력 한정자 h
은 열 헤더의 인쇄를 억제합니다. 지. PPID
.
출력 형식 제어 옵션 o
은 ps
에 의해 제공된 정보를 선택하는 데 사용됩니다.이 경우에는 부모 프로세스 ID 인 ppid
만 있습니다. 위에서 설명 된 것과 매우 유사한 ps
명령, 선택 선택한 부모와의 명령 이름이 시간을 얻을 수 있도록 (부모 프로세스 ID입니다)
ps p`…` hocomm
이전 명령의 출력은 backquoted 명령을 대체 출력은 comm
입니다.
Command Substitution 및 ps - report process status을 참조하십시오.
제공 한 명령에 대해 자세히 설명해 주시겠습니까? 추신 : 나는 스크립팅에 능숙하지 않다. 감사! –
@ Gautam Singh : 세부 정보를 추가했습니다. – Armali
물론입니다. 문제의 프로세스의 PPID가 무엇인지 확인하고 프로세스를 찾은 다음 PPID를 가져 와서 셸을 찾을 때까지 계속 진행해야합니다. 'pstree'도 도움이 될 수 있습니다. – GMichael
@GMichael 코드 기반 재귀 호출 대신 다른 해결책이 있습니까? 내 말은 다른 처리가 필요하기 때문에 제게 제공 할 수있는 명령이 있다는 것입니다. 그래서 최대한 단순하게 처리하기를 원했을 것입니다. –
@ GautamSingh No. – 123