В контексте Unix это действительно известно как "здесь документ". Я полагаю, что конструкция "heredoc" прибывает из PHP, Perl и других языков сценариев, и для сценариев оболочки я был бы склонен придерживаться со "здесь документом".
В конце кажется, что команда Matlab впоследствии охватывает другие процессы (JVM) при вызове. Однако существует недокументированная функция feature
это возвращает PID рабочего процесса Matlab:
nohup time matlabR2012b -nodesktop -nosplash -nodisplay \
-r "fprintf('PID: %s\n', num2str(feature('getpid')));run $1; exit" &> "$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
средства, что в конце названной программы нет никакого перехода назад к оболочке; потому что нет никакой оболочки больше.
Для объяснения других опций я упомянул, см. мой ответ на этот вопрос.
-r "$1;exit"
но это не помогает.
– John Manak
16.05.2013, 16:29
bash
видит $1
в его команде, но не имеет параметров (приводящий к -r run ;exit
). Попробуйте исправленную версию. Можно использовать strace -f matlab ...
для проверки, ли matlab
ветвления.
– Hauke Laging
16.05.2013, 16:38
Существует способ получить pid, но установка его как первая строка могла быть немного хитрой с тех пор, как только процесс запускается, это начнет писать в файл журнала.
При предположении, что цель здесь не состоит в том, чтобы установить первую строку как pid, но знать pid для уничтожения процесса, как только Вы сделали nohup, можно сохранить pid команды в изодромном с предварением файле и уничтожить использование его.
nohup some_command some_parameters &
echo $! > matlab_program_1.pid
kill `cat matlab_program_1.pid`
some_command
в time matlab
Вы получили бы идентификатор процесса time
от $!
не matlab
– Anthon
16.05.2013, 15:46