Сохранение 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
Другие вопросы по тегам