通过启动过程实现PID污染

时间:2015-02-27 20:17:38

标签: linux macos shell firefox-addon

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

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

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

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

1 个答案:

答案 0 :(得分:1)

在unix产生的情况下,新流程通常先通过fork()父进程完成,然后使用新的流程图到位{/ 3>}替换孩子。< / p>

分叉使新进程继承 - 在许多其他方面 - 来自父进程的所有文件描述符。然后它可能会在调用exec()时放弃其中一部分,但默认情况下不这样做。请参阅exec()如何为close-on-exec标记文件描述符。

  • 如果你可以控制衍生过程,你可以找到有问题的描述符并关闭它。
  • 如果不这样做,那么你必须编写一个可执行文件来标记close-on-exec的描述符(参见上文),然后调用exec()以最终启动你真正想要的子进程。
    • 编辑:正如评论中所指出的那样,现有的程序就是这样做的