Сохранение PID в выводе nohup
Я хочу сохранить PID процесса nohup как часть имени сгенерированного выходного файла nohup.
Это идет в правильном направлении, но работает только в том случае, если процесс с его идентификатором уже установлен, т.е. работает только на следующей строке. Это означает, что он не работает, потому что это неправильный PID (из последней команды):
nohup echo "hello World" > nohup_out_`echo $!`.txt &
Есть ли способ сохранить полученный PID в выходном имени файла nohup?
2 ответа
Нет. Вы не можете сохранить PID команды в названии файла, в который вы перенаправляете вывод этой команды.
Причина этого проста: ваша оболочка открывает файл с >
или же >>
прежде чем он запускает команду. Там пока нет PID.
Примечание:`echo $!`
получает награду за " бесполезное использование эха ".
Вы можете создать файл самостоятельно и переименовать его после открытия. Вы должны убедиться, что файл остается в той же файловой системе, чтобы индексный дескриптор не менялся. Если индексный дескриптор не меняется, его можно переименовать, пока пишется в файл. Командаmv
в этом случае ничего не будет перемещаться. Вместо этого он просто изменит запись каталога. И это не влияет на удержание дескриптора файлаnohup
.
out=$(mktemp -p .)
nohup sh -c 'sleep 30 ; echo "hello world"' >> $out 2>&1 &
mv $out nohup_out_$!.txt
unset out