linux - PID 启动过程污染

标签 linux macos shell firefox-addon

<分区>

在 nix/mac 上,如果我使用 nsiProcess run 或 runAsync 启动进程,启动进程 PID 会进入启动进程的文件(如锁定文件)等。

这张 gif 显示我有一个个人资料。我对 parentlock 文件执行 lsof,它显示了一个 pid。然后我启动第二个配置文件,它现在显示其中一个 parentlock 文件现在有多个 pid。关于如何避免这种 pid 污染的任何想法?我可以使用 nsiprocess 或 jsctypes/libc 方法吗?

哦,这是显示我的截屏视频的 gif,它循环一次,所以如果你想重复只是简单的页面刷新

http://i.imgur.com/OsuGbqB.gif

最佳答案

在 unix 下,生成一个新进程通常首先由 fork() 完成通过 exec() 调用父进程,然后用 就位 的新进程镜像替换子进程.

fork 导致新进程继承父进程的所有文件描述符。然后它可能会在调用 exec() 时丢弃其中的一些,但默认情况下不会这样做。参见 this SO answer如何为 close-on-exec 标记文件描述符。

  • 如果您可以控制生成的进程,您可以找到有问题的描述符并将其关闭。
  • 如果你不这样做,那么你必须编写一个可执行文件来标记 close-on-exec 的描述符(见上文),然后调用 exec() 以最终启动你实际使用的子进程通缉。
    • 编辑:正如评论中所指出的,现有程序可以做到这一点

关于linux - PID 启动过程污染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28773538/

相关文章:

linux - 如何将存档的所有对象包含在共享对象中?

iphone - 开发 iPhone 应用程序需要购买 Mac 吗?

macos - 使监视文件夹等待文件完成渲染

python - 多个 shebangs 适用于不同的操作系统

c - 在C中实现管道

call_usermodehelper/call_usermodehelperpipe 用法

sql-server - Sql Server MacOS/Linux 上用户 sa 的 dotnet ef 脚手架登录失败

android - 我无法在 eclipse 4.2.1 中配置 ADT 插件(在 Mac OS X 10.5.8 上)

arrays - 正则表达式匹配给定数据中的最后一个值

c - gnome-builder 找不到我的空地文件