Matlab 인스턴스의 프로세스 ID(PID)를 인쇄합니다.

Matlab 인스턴스의 프로세스 ID(PID)를 인쇄합니다.

$1Matlab 스크립트를 실행하기 위해 쉘 스크립트를 생성하고 두 개의 매개변수, 즉 matlab 파일 경로( )와 로그 파일 경로( $2) 를 지정했습니다 .

nohup time matlab -some_parameters -r "run $1;exit" &>> "$2" &

Matlab 프로세스를 종료해야 할 때 어떤 프로세스가 어떤 프로세스인지 구분하기 어려울 때가 있습니다. Matlab 프로세스의 pid를 로그 파일(예: )에 포함하는 것이 가능합니까 $2?

답변1

프로세스의 인스턴스를 표시하는 방법에는 여러 가지가 있습니다. 프로세스 목록의 명령 이름(예: matlab_1대신 )이나 환경 변수를 통해 matlab이 작업을 수행 할 수 있습니다. PID를 사용하는 것도 가능합니다. matlab시작하기 전에 출력 하면 됩니다 .

nohup time bash -c 'echo $$; exec matlab -some_parameters -r "run '"$1"';exit"' &>> "$2" &

편집 1:

$$은 셸의 PID이지만 프로세스는 execmatlab프로세스만 덮어쓰므로 PID는 변경되지 않습니다. exec이는 쉘이 없기 때문에 호출된 프로그램이 종료될 때 쉘로 다시 이동할 수 없음을 의미합니다.

내가 언급한 다른 옵션에 대한 설명은 내 답변을 참조하세요.이 문제.

답변2

마지막으로 Matlab 명령은 호출될 때 다른 프로세스(JVM)에 걸쳐 있는 것처럼 보입니다. 그러나 문서화되지 않은 기능이 있습니다.feature실행 중인 Matlab 프로세스의 PID를 반환합니다.

nohup time matlabR2012b -nodesktop -nosplash -nodisplay \
  -r "fprintf('PID: %s\n', num2str(feature('getpid')));run $1; exit" &> "$2" &

답변3

pid를 얻는 방법이 있지만 프로세스가 시작되자마자 로그 파일에 쓰기 시작하기 때문에 이를 첫 번째 줄로 설정하는 것이 약간 까다로울 수 있습니다.

여기서 목표가 첫 번째 줄을 pid로 설정하는 것이 아니라 프로세스를 종료하기 위해 pid를 아는 것이라고 가정하면 nohup이 완료되면 명령의 pid를 pid 파일에 저장하고 이를 사용하여 종료할 수 있습니다.

nohup some_command some_parameters &
echo $! > matlab_program_1.pid
kill `cat matlab_program_1.pid`

관련 정보