创建文件的进程的PID

时间:2013-11-19 20:30:56

标签: shell

我可以在创建文件时获取touch的pid吗?我已经尝试了touch ID$! &,但它没有正确显示pid。它在触摸前接受命令。有什么建议吗?

3 个答案:

答案 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$!