获取文件创建的PID

获取文件创建的PID

我正在编写一个 bash 脚本,该脚本创建 5 个扩展名为“.P”的文件,并在其中写入一行“某事”。 “P”代表一个数字,它是创建文件的进程的PID。你怎么能这么做呢?我正在创建我的文件并像这样写入:echo "something" > file_name

答案1

如果你想知道当前正在运行的 bash 会话的 PID(它很可能是运行您的 shell 脚本的脚本),您可以使用$$${BASHPID}。它们相似但又略有不同;引用 GNU bash 4.2 手册页的“Shell 变量”部分:

巴什PID

扩展为当前 bash 进程的进程 ID。这与$$某些情况下不同,例如不需要重新初始化 bash 的子 shell。

您可能还会发现${PPID}有帮助;它保存当前 bash 会话的父进程的进程 ID。如果您想更进一步,则必须编写一些代码来遍历进程树,而这几乎肯定是依赖于操作系统的。

尝试echo "something" > file_name.$$在你的 shell 中举个例子。如果您正在做任何严肃的事情,请务必引用任何涉及您自己未设置为已知安全值的环境变量的内容。

如果你想要的是最初创建文件的进程的PID,如标题所示,我怀疑这是可能的(尽管这具体取决于您正在运行的操作系统)。在一般情况下,它并不是一个有用的信息来存储,因为 PID 会被重用,并且通常或多或少是随机的。在繁忙的多用户系统上,它们出于所有意图和目的将要对于任何给定用户来说是随机的。

答案2

试试这个脚本

#!/bin/sh
for i in `seq 5`
do
    pid_var=`grep ^Pid: /proc/self/status | awk '{print $2}'`
    echo "something $$" > /tmp/filename$i.$pid_var
done

它的输出将是这样的:

filename1.1234
filename2.1235
filename3.1236
filename4.1237
filename5.1238

相关内容