最准确轻量的方式是直接调用 getpid() 系统调用,c 程序需包含 和 ,返回 pid_t 类型的当前进程 pid;shell 中用 $$ 变量;/proc/self 方式通用可靠;避免使用 ps/grep 等易误匹配的方法。

直接用 getpid() 系统调用,这是最准确、最轻量的方式——它不依赖外部命令,也不受进程名模糊匹配干扰,返回的就是当前进程自身的 PID。
在 C 程序中获取当前 PID
需要包含两个头文件:<sys></sys> 和 <unistd.h></unistd.h>。调用 getpid() 即可:
- 返回类型是
pid_t(本质是带符号整数) - 无需参数,始终返回调用它的那个进程的 PID
- 示例代码片段:
#include <stdio.h><br>#include <sys><br>#include <unistd.h><br><br>int main() {<br> printf("当前进程 PID: %d\n", getpid());<br> return 0;<br>}</unistd.h></sys></stdio.h>
在 Shell 中获取当前 Shell 进程的 PID
Shell 提供了内置变量 $$,它直接展开为当前 shell 进程的 PID:
- 运行
echo $$就能立刻看到结果 - 注意不是
$!(那是上一个后台进程的 PID),也不是$?(那是上一条命令退出状态) - 该值在脚本执行全程稳定,适合用于日志标记或临时文件命名
通过 /proc/self 获取(通用且可靠)
Linux 的 /proc/self 是一个指向当前进程目录的符号链接,读取其中的 stat 或直接用 readlink 都能拿到 PID:
-
readlink -f /proc/self→ 输出类似/proc/12345,末尾数字即 PID -
cat /proc/self/stat | awk '{print $1}'→ 直接提取第一字段(PID) - 这个方法不依赖语言或 shell 类型,任何能执行命令的环境都适用
不推荐:用 ps/grep 匹配自己
像 ps -o pid= -C bash 或 ps aux | grep $$ 这类方式看似可行,但存在明显问题:
- 可能匹配到其他同名进程(如多个 bash 实例)
- 在脚本中容易误捕获子 shell 或 grep 自身进程
- 多了一层外部命令开销,且结果需解析,可靠性低











