我可以在创建文件时获取touch
的pid吗?我已经尝试了touch ID$! &
,但它没有正确显示pid。它在触摸前接受命令。有什么建议吗?
答案 0 :(得分:0)
我想您可以编写一个调用fork()
的小型C或Perl程序,然后使用其中一个exec*()
函数从子进程调用touch
。作为fork
调用的结果,父进程将接收子进程的PID。
您在评论中说要将PID插入文件名中。我想不出一种方法来调用touch
自己的PID作为其命令行参数的一部分;你很快就不会知道PID了。我想你可以在touch
之后重命名该文件。
但touch
过程的PID并不特别有意义。在您可以使用它之前,该过程将终止。
如果你只想要一个(或多或少)唯一号码作为文件名的一部分,我想不出它必须是touch
进程的PID的任何好理由。你可以这样做:
NEW_PID=$(sh -c 'echo $$')
touch foo-$NEW_PID.txt
它为您提供了一个短期shell进程的PID。
请注意,PID不是唯一的;由于只有有限的许多可能的PID,它们会在一段时间后重新使用。 (通过快速分配多个进程,我已经能够在不到一分钟的时间内强制重用PID。)
答案 1 :(得分:0)
这是触摸在perl中重写的,创建过程的pid是文件名的一部分
perl -e 'open(F,">".$$."myfile")||die $!'
答案 2 :(得分:0)
如果你确实需要那个 pid,这是一个多步骤的过程:
f=$(mktemp)
touch $f &
wait $!
mv $f ./ID$!