사용자가 실행한 명령의 프로세스 ID

사용자가 실행한 명령의 프로세스 ID

몇 가지 기본 명령만 실행한다고 생각해 보세요.

ls

이제 위 명령이 실행될 때 pid를 갖게 됩니까? 그렇다면 해당 PID를 어떻게 확인할 수 있습니까?

내가 시도할 때

echo $!

ls 명령 후에는 빈 출력이 반환됩니다.

그리고 내가 실행하면

ls &

그런 다음

echo $!

이제 ls 명령의 pid를 제공합니다.

실제로 아래 감사 로그를 보면 이런 문제가 나옵니다.

type=USER_CMD msg=audit(12/16/2014 17:15:36.201:68342) : user pid=19247 uid=enginst auid=enginst ses=4229 msg='cwd=/apps/oradump/ora_temp_rdbms/OH3 cmd=chmod -R 777 11203 terminal=pts/2 res=success'
type=USER_CMD msg=audit(12/16/2014 17:36:33.968:68753) : user pid=1801 uid=enginst auid=enginst ses=4229 msg='cwd=/apps/oracle/RDBMS cmd=chmod -R 777 11203 terminal=pts/2 res=success'

여기서 위의 로그는 "chmod -R 777"이 사용자 enginst에 의해 실행되었으며 pid도 있음을 보여줍니다.

이제 auditd 로그에 ppid(상위 프로세스 ID)가 표시되지 않기 때문에 chmod 명령이 사용자에 의해 명시적으로 실행되었다고 결론을 내릴 수 있습니다. 일부 스크립트/프로그램이 이를 시작한 경우에도 마찬가지입니까?

그런데 위의 내용을 확인하기 위해 이제 Process Accounting을 열어봤습니다. 하지만 어느 쪽이든 내 질문은 ...

chmod 및 ls와 같은 명령이 실행될 때 pid를 얻습니까? 아니면? 아니면 포그라운드가 아닌 백그라운드에서 실행될 때 PID를 얻나요?

답변1

모든 외부 명령과 모든 하위 쉘에는 자체 PID가 있습니다. 쉘 내장 함수가 없습니다.

방금 종료한 동기화 명령의 PID를 제공할 수 있는 기능이 있는지 모르겠습니다. 물론 다음과 같이 모든 명령을 실행할 수 있습니다.

command & pid=$!; fg

관련 정보