bash - “echo &”命令给出的进程号是多少?
问题描述
每次我跑
echo &
...返回不同的“进程号”或 PID。
这些是干什么用的?为什么每次都不一样?
解决方案
&
fork()
s 关闭你的 shell 的一个新副本(execve()
如果你正在运行一个外部程序,则用于用一个外部程序替换该 shell 的副本,但echo
不是外部程序)。因此,当您运行时echo &
,您会创建一个 shell 副本作为新进程;它运行echo
,然后退出。
每次在 UNIX 上启动一个新进程时——通过fork()
ing 或clone()
ing 现有进程发生——新进程在查找表中获取一个进程 ID 号作为操作系统用来引用正在运行的程序的条目;这就是你在这里看到的。
进程 ID 是程序识别其他程序的句柄,包括向它们发送信号或检查它们的状态(例如,查看程序是否仍在运行;或者,如果程序退出,则了解它是如何死亡的)。请参阅waitpid()
或kill()
获取需要提供 PID 才能运行的系统调用(操作系统级请求)的示例。
PID 的分配方式是为了避免频繁重用——这样你就不太可能用kill()
信号意外地碰到错误的程序(如果你打算作为目标的程序退出,并且之后启动了其他东西)。
推荐阅读
- android - 如何在通知android中设置自定义点击
- javascript - 如何禁用在 v-time-picker 小部件中选择分钟?
- python - 如何在 Windows 10 的 python 中安装模块 pybluez
- android - 我怎样才能在drawable中绘制这个形状
- sql-server - 多值参数在 Oracle 数据源的 SSRS 2017 中不起作用
- react-native - React Native Stack 维护的 React 导航
- adobe - AEM 调度程序需要在部署后自动启动
- java - 如何单击 selenium webdriver 中的剑道下拉菜单
- javascript - 如何在 NodeJS 中转换为导入/导出 ES 模块
- c++ - 不同 C++ 文件中未命名命名空间中的名称可以引用相同的命名事物吗?