2016-07-08 7 views
0

나는 최근에 프로세스리스트 (또는 단일 프로세스의 경우 pid)에 대해 shell의 이름을 찾아야하는 상황에 처해있다. 우리가 그것을 찾을 수있는 방법이 있습니까 (바람직하게는 psgrep 명령을 사용).linux에서 프로세스를 실행하는 데 사용 된 셸을 찾으십시오.

+4

물론입니다. 문제의 프로세스의 PPID가 무엇인지 확인하고 프로세스를 찾은 다음 PPID를 가져 와서 셸을 찾을 때까지 계속 진행해야합니다. 'pstree'도 도움이 될 수 있습니다. – GMichael

+0

@GMichael 코드 기반 재귀 호출 대신 다른 해결책이 있습니까? 내 말은 다른 처리가 필요하기 때문에 제게 제공 할 수있는 명령이 있다는 것입니다. 그래서 최대한 단순하게 처리하기를 원했을 것입니다. –

+0

@ GautamSingh No. – 123

답변

1

프로세스가 쉘에서 시작되었다는 것을 알고 있으므로 프로세스 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)의 가변 pidlist 세트의 각 요소에 대해 한번 실행되는 명령. Looping Constructs을 참조하십시오.

구조체 ${list[*]}list의 모든 요소로 확장됩니다. list이 배열 변수 (예 : list=(1234 5678)으로 설정) 인 경우 이 공백으로 구분 된 요소 (예 : list="1234 5678"으로 설정)를 가진 간단한 변수 인 경우 bash에서 작동합니다. Shell Parameter ExpansionArrays을 참조하십시오.

echo -n $pid: 

출력 e. 지. 1234:에 개행 문자가 없으므로 다음 출력이 : 바로 뒤에 표시됩니다. Bash Builtin Commands을 참조하십시오.

ps p$pid hoppid 

로세스 선택 옵션 p 정보 $pid이 경우에 도시 될되는 프로세스 (들)를 선택한다.
출력 한정자 h은 열 헤더의 인쇄를 억제합니다. 지. PPID.
출력 형식 제어 옵션 ops에 의해 제공된 정보를 선택하는 데 사용됩니다.이 경우에는 부모 프로세스 ID 인 ppid 만 있습니다. 위에서 설명 된 것과 매우 유사한 ps 명령, 선택 선택한 부모와의 명령 이름이 시간을 얻을 수 있도록 (부모 프로세스 ID입니다)

ps p`…` hocomm 

이전 명령의 출력은 backquoted 명령을 대체 출력은 comm입니다.

Command Substitutionps - report process status을 참조하십시오.

+0

제공 한 명령에 대해 자세히 설명해 주시겠습니까? 추신 : 나는 스크립팅에 능숙하지 않다. 감사! –

+0

@ Gautam Singh : 세부 정보를 추가했습니다. – Armali