Bash:是否可以阻止 PID 被重复使用?

2024-01-02

是否可以阻止 PID 被重复使用?

例如,如果我运行一份工作myjob在背景中myjob &,并使用获取PIDPID=$!,是否可以阻止 linux 系统重新使用该 PID,直到我检查该 PID 不再存在(进程已完成)?

换句话说,我想做类似的事情:

myjob &
PID=$!
do_not_use_this_pid $PID
wait $PID
allow_use_of_this_pid $PID

在上面给出的示例中,想要这样做的原因没有多大意义,但请考虑连续启动多个后台作业,然后等待它们全部完成。

一些程序员正确地指出,没有两个进程可以共享相同的 PID。这是正确的,但不是我在这里问的。我正在寻求一种方法来防止在使用特定 PID 启动进程后重新使用 PID。然后还有一种在我使用完它后重新启用它的使用的方法,以检查我的原始过程是否完成。

由于已被要求,这里是一个用例:

  • 启动多个后台作业
  • 获取后台作业的PID
  • 防止后台作业终止后 PID 被另一个进程重复使用
  • 检查“后台作业”的 PID - 即确保后台作业完成
  • [注意,如果禁用后台作业 PID 的 PID 重用,则后台进程终止后启动的新进程将无法使用这些 PID]*
  • 重新启用后台作业的 PID
  • repeat

*进一步说明:

  • 假设推出 10 个职位
  • 作业 5 退出
  • 由另一个用户启动的新进程,例如,他们登录到 tty
  • 新进程与作业 5 具有相同的 PID!
  • 现在我们的脚本检查 Job 5 是否终止,但看到 tty 正在使用 PID!

您无法“阻止”内核重用 PID。但是,我倾向于认为这对您来说并不是真正的问题。

但请考虑连续启动多个后台作业,然后等待它们全部完成。

一个简单的wait(不带参数)将等待所有子进程完成。所以,您无需担心 PID 被重用。

当您启动多个后台进程时,PID 确实有可能被其他进程重用。 但这不是问题,因为你不能wait除非它是您的子进程,否则在进程上。

否则,检查您启动的后台作业之一是否通过除wait总是会变得不可靠。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash:是否可以阻止 PID 被重复使用? 的相关文章

随机推荐

  • 当非管理员尝试访问 wp-admin 或 wp-login.php 时,如何将用户重定向到 404 页面未找到错误

    出于安全原因 我试图通过重写链接来限制我的 WordPress 网站管理员和登录面板对非管理员用户的访问 这样如果用户输入http www mysite com wp login php http www mysite com wp log
  • 传入 Apple 推送通知的端口号

    需要在网络上打开哪些网络服务 端口号 传出传入或两者同时打开 iPod touch 才能接收 Apple 推送通知 我知道发送 apns 时要设置的传出端口号 唯一的问题是 在我的学校 几乎每个传出 和传入 端口都被阻止 因此 APN 不起
  • 如何让 mongo 映射器在 Rails 4 中生成 config/mongo.yml 文件

    我正在尝试使用 Mongo Mapper gem 制作一个 Rails 应用程序 我按照 Mongo Mapper 文档中的说明进行操作 链接在这里 Mongo 映射器文档 http mongomapper com documentatio
  • 可排序 + 可拖动演示 - 如何访问放置的项目?

    我有一个可排序的列表 当一个新项目 从可拖动的项目 放入列表中时 我想访问它以对其执行一些操作 这就是我所拥有的 mySortableList sortable receive function event ui alert this is
  • 在 Objective C 类别中使用 Super?

    我想重写 Objective C 类中的一个方法 但我没有源代码 我已经研究过了 看来类别应该允许我这样做 但我想在我的新方法中使用旧方法的结果 使用 super 来获取旧方法的结果 每当我尝试这个时 我的方法都会被调用 但 超级 为零 知
  • Google 脚本,根据上次修改日期删除文件夹中的文件

    我正在尝试创建一个脚本 该脚本每周一次通过共享驱动器运行 并删除过去 90 天内未修改的任何内容 我在这里发现了一些脚本似乎没有按照我的预期工作 我目前拥有的脚本如下 但由于某种原因它似乎不起作用 但似乎应该起作用 它似乎识别了文件 但似乎
  • eval 有什么作用以及为什么它是邪恶的? [复制]

    这个问题在这里已经有答案了 var myString x myObject x 10 value eval myObject myString alert value alert myObject myString 评估是邪恶的 http
  • Excel 多行条件色标

    我有一个电子表格 显示一系列产品的库存数据 我每天都有一个专栏 其中的值显示我的库存水平将如何随着时间的推移而减少 我想使用色标来轻松查看某些产品的库存何时会变少 我的量表的最小值 中值和最大值基于不同列中的值 并且每个产品的值都不同 根据
  • 使用 java 获取便携式设备

    我正在尝试访问设备中的一些文件 具有 Windows CE 其中的应用程序 显示为便携式设备在 windows 7 中使用 java applet 我的设备路径是这样的 Computer Attari s Device myfile txt
  • Doctest 无法识别 __future__.division

    我写了以下文档测试x doctest This is something gt gt gt x 3 4 foo bar something else gt gt gt from future import division gt gt gt
  • 定时器和线程的问题

    我是一个通过实例学习的 C 程序员 水平不是很先进 这就是为什么这个问题完全难住了我 无论互联网上有多少信息 我本质上是在创建一个程序 该程序在计时器上重复轮询网站以获取一些信息 在此过程中 将创建一个 WebBrowser 控件来导航到信
  • Apple 登录时出现错误“Invalid_client”firebase android

    我们为 Apple 所做的一切 登录 在 Firebase 中 我们设置 service id keyID 私钥 团队 ID 在 Android 代码中 我们做了与文档相同的操作 尽管如此 我们仍然面临苹果的问题 以无效客户端身份登录 经过
  • 检查: git rebase 是否完成?

    这是 git rebase 的替代方案 https stackoverflow com questions 39603553 alternative to git rebase 39605048 noredirect 1 comment66
  • 在 Rust 测试中,如何使用 NEAR 协议检查帐户的状态(帐户余额)?

    在 Rust 测试中 如何检查帐户的状态 帐户余额 例如 我有这个辅助函数 fn set context account index usize is view bool deposit Amount let context VMConte
  • Icefaces 3.0.1 FileEntry:FileEntryListener 从未被调用

    1 1 IceFaces 3 0 1 和 JSF 2 1 并尝试与 ace fileentry 一起使用 我不明白为什么监听者永远不会被调用 甚至 IDE 也会向我发送警告 pruebaBean sampleListener 是未知属性 这
  • ASP.NET MVC 如何指定视图页面驻留在哪个文件夹?

    默认情况下 ASP NET MVC 引擎在以下文件夹中搜索视图页面 Views 控制器名称 动作 aspx Views Shared 动作 aspx 不过 我想将一些视图页面如下所示 Views 命名空间 Controller Name 动
  • com.mongodb.MongoTimeoutException:等待连接时 10000 毫秒后超时

    我以为这个问题已经被问过好几次了 但我不得不再次问一遍 因为为这个问题提供的解决方案并没有给我一个准确的答案来摆脱这个该死的错误 I use mongo java driver 2 12 4 and mongo jar当我尝试将文档插入数据
  • 布尔属性的单选按钮

    我有一个简单的布尔属性valid在我的对象中document并需要将其绑定到无线电输入 这是我到目前为止所拥有的
  • Visual Studio 2010 中的“浏览查找源”

    Visual Studio 2010 中何时启用 浏览查找源 见下文 另外 我想启用它 以便我可以浏览到已经下载的源代码 文件来自http referencesource microsoft com http referencesource
  • Bash:是否可以阻止 PID 被重复使用?

    是否可以阻止 PID 被重复使用 例如 如果我运行一份工作myjob在背景中myjob 并使用获取PIDPID 是否可以阻止 linux 系统重新使用该 PID 直到我检查该 PID 不再存在 进程已完成 换句话说 我想做类似的事情 myj