저는 ".P" 확장자를 가진 5개의 파일을 생성하고 그 안에 "something" 줄을 쓰는 bash 스크립트를 작성 중입니다. "P"는 파일을 생성한 프로세스의 PID인 숫자를 나타냅니다. 어떻게 이런 일을 할 수 있나요? 나는 파일을 만들고 다음과 같이 쓰고 있습니다.echo "something" > file_name
답변1
현재 실행 중인 bash 세션의 PID를 알고 싶다면(쉘 스크립트를 실행하는 스크립트일 가능성이 높습니다) $$
또는 를 사용할 수 있습니다 ${BASHPID}
. GNU bash 4.2 매뉴얼 페이지의 "쉘 변수" 섹션을 인용하면 비슷하지만 약간 다릅니다.
배쉬 PID
현재 bash 프로세스의 프로세스 ID로 확장됩니다. 이는
$$
bash를 다시 초기화할 필요가 없는 서브셸과 같은 경우와 다릅니다.
${PPID}
현재 bash 세션의 상위 프로세스의 프로세스 ID를 저장하는 것이 도움이 될 수도 있습니다 . 더 나아가려면 프로세스 트리를 살펴보는 코드를 작성해야 하며 이는 거의 확실히 OS에 따라 다릅니다.
echo "something" > file_name.$$
셸에서 예제를 시도해 보세요 . 심각한 작업을 수행하는 경우 알려진 안전한 값으로 설정되지 않은 환경 변수와 관련된 모든 내용을 인용해야 합니다.
원하는 것이 원래 파일을 생성한 프로세스의 PID인 경우,제목에서 알 수 있듯이 이것이 가능하다고 생각합니다(실행 중인 OS에 따라 다르지만). 일반적으로 PID는 재사용되고 일반적으로 다소 무작위이므로 저장하기에 유용한 정보가 아닙니다. 바쁜 다중 사용자 시스템에서는 모든 의도와 목적을 위해 작동합니다.~ 할 것이다특정 사용자에 대해 무작위입니다.
답변2
이 스크립트를 사용해 보세요
#!/bin/sh
for i in `seq 5`
do
pid_var=`grep ^Pid: /proc/self/status | awk '{print $2}'`
echo "something $$" > /tmp/filename$i.$pid_var
done
출력은 다음과 같습니다:
filename1.1234
filename2.1235
filename3.1236
filename4.1237
filename5.1238