$1
Matlab 스크립트를 실행하기 위해 쉘 스크립트를 생성하고 두 개의 매개변수, 즉 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이지만 프로세스는 exec
셸 matlab
프로세스만 덮어쓰므로 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`