【问题标题】:Duplicate process without fork没有分叉的重复进程
【发布时间】:2020-05-07 07:21:06
【问题描述】:

在 linux 嵌入式系统中,我可以在 ps 中看到相同二进制文件的 2 个进程(pid1=X,pid2=Y)这些进程没有线程(/proc/X/task/proc/Y/task 不存在)

当我查看/proc/Y/status 时,我可以看到父 pid(PPID) 是 X。

我查看了 Ida 中的二进制文件,即动态二进制文件,但在导入表中没有看到 fork 函数。

当我使用 pid X 或 pid Y 的 PTRACE 更改一些影响另一个 pid 的指令时,它们似乎共享相同的代码区域

如果 Y 是 X 的线程,我应该在 /proc/X/task 中看到它,而不是在 ps 中看到它而不显示线程标志。

哪个函数可以复制共享相同代码区域但属于fork 的进程?

【问题讨论】:

    标签: c linux process fork ps


    【解决方案1】:

    哪个函数可以复制共享相同代码区域的进程?

    据我所知,我可以列出系统调用:

    • fork
    • vfork - fork 有一些限制并且更快
    • clone - fork 但针对 linux 进行微调
    • clone3 - clone() 的更新版本
    • clone2 - clone 特定于 IA-64,仅适用于 IA-64

    【讨论】:

    • 这些函数是否共享导入表和代码区?
    • 那么您是否阅读了这些函数的文档,您是否有不清楚的地方? 函数没有导入表,我猜你的意思是问这些系统调用创建的进程是否共享导入表和代码区。
    • 是的,我的意思是如果这些系统调用创建的进程共享导入表和代码区域
    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2010-11-30
    • 2016-05-20
    • 2021-05-30
    • 1970-01-01
    • 2013-08-01
    • 2011-06-24
    相关资源
    最近更新 更多