몇 가지 기본 명령만 실행한다고 생각해 보세요.
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