首页 > 解决方案 > “echo &”命令给出的进程号是多少?

问题描述

每次我跑

echo &

...返回不同的“进程号”或 PID。

这些是干什么用的?为什么每次都不一样?

标签: bashshell

解决方案


& fork()s 关闭你的 shell 的一个新副本(execve()如果你正在运行一个外部程序,则用于用一个外部程序替换该 shell 的副本,但echo不是外部程序)。因此,当您运行时echo &,您会创建一个 shell 副本作为新进程;它运行echo,然后退出。

每次在 UNIX 上启动一个新进程时——通过fork()ing 或clone()ing 现有进程发生——新进程在查找表中获取一个进程 ID 号作为操作系统用来引用正在运行的程序的条目;这就是你在这里看到的。

进程 ID 是程序识别其他程序的句柄,包括向它们发送信号或检查它们的状态(例如,查看程序是否仍在运行;或者,如果程序退出,则了解它是如何死亡的)。请参阅waitpid()kill()获取需要提供 PID 才能运行的系统调用(操作系统级请求)的示例。

PID 的分配方式是为了避免频繁重用——这样你就不太可能用kill()信号意外地碰到错误的程序(如果你打算作为目标的程序退出,并且之后启动了其他东西)。


推荐阅读