Intereting Posts
как перечислить загруженные apt-пакеты без зависимостей Компилятор C не может создавать исполняемые файлы при установке h4toh5 на debian Как я могу просматривать пакеты из определенного репозитория? Извлечь точное количество элементов из одного и того же идентификатора Есть ли способ разрешить все IP-адреса PIA VPN со сценарием? Как автоматически создать пустой каталог при создании нового пользователя? Восстановить / etc / hosts на SuSE Разница между параметрами командной строки «-» и «-» с префиксом? Как получить конкретное поле строки Значение «+» или «-» в сообщениях nohup Как создать псевдоним для сетевого устройства? awk или sed для соответствия регулярному выражению в определенной строке, выход true, если успех, false, иначе Как установить libgnomeprint при тестировании Debian? Сеть не имеет пинга и не может разрешать хосты Как я могу сжать файлы с именем вывода, таким же, как родительская папка?

Идентификатор процесса печати (PID) экземпляра Matlab

Чтобы запустить скрипты Matlab, я создал сценарий оболочки, которому я даю два параметра – путь к файлу matlab ( $1 ) и файлу журнала ( $2 ):

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

Когда мне нужно убить один из процессов Matlab, иногда бывает сложно определить, какой из них. Можно ли каким-то образом включить pid процесса Matlab в файл журнала (т.е. в $2 )?

Существует несколько способов обозначения экземпляров процесса. Вы можете сделать это через имя команды в списке процессов (например, 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 означает, что в конце вызываемой программы нет возврата к оболочке; потому что оболочки больше нет.

Для объяснения других вариантов, о которых я говорил, см. Мой ответ на этот вопрос .

В конце концов, кажется, что команда Matlab впоследствии связывает другие процессы (JVM) при вызове. Однако есть функция недокументированной функции, которая возвращает PID запущенного процесса Matlab:

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

Существует способ получить pid, но установить его, поскольку первая строка может быть немного сложной, так как как только процесс запустится, он начнет запись в файл журнала.

Предполагая, что целью здесь является не устанавливать первую строку как pid, а знать pid, чтобы убить процесс, как только вы сделали nohup, вы можете сохранить pid команды в файле pid и убить ее ,

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