【问题标题】:How to get a Linux process run immediately after execv system call如何在 execv 系统调用后立即运行 Linux 进程
【发布时间】:2018-05-25 02:02:05
【问题描述】:

进程(Android zygote)是从init进程fork出来的,然后调用execv加载真正的二进制文件(/system/bin/app_process)运行。 正如我从日志时间戳中检查的那样,fork 和“execv 系统调用返回”之间几乎没有延迟,但“execv 系统调用返回”和“app_process 的 main()”之间存在明显延迟(大约 1 秒) .

看起来进程在 execv 系统调用之后被调度,并在一段时间后被调度,导致真正的 main() 延迟 1 秒。 (当然,.so 的加载也应该有助于 1 秒)。

我的目标是让这个进程在 execv 调用后尽快运行。我已经尝试为fork之后的进程设置最高优先级-20,延迟减少到1秒,但我仍然想进一步减少。

有没有办法让这个进程安排在 execv 系统调用返回后立即运行?

【问题讨论】:

    标签: linux kernel schedule execv


    【解决方案1】:

    后来我转储了目标进程的调度日志,发现它在 execv 调用之后就已经被调度了,但是由于 mm 映射页面错误,它很快就退出了 CPU——这表明它开始加载二进制文件。它需要加载如此多的库,以至于在转到 main() 函数之前花了将近一秒钟。所以问题出在错误的方向,正确的方向是如何加速加载,如果可能的话。

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2013-05-20
      • 2011-10-15
      相关资源
      最近更新 更多