如何在execv系统调用后立即运行Linux进程

时间:2018-05-25 02:02:05

标签: linux kernel schedule execv

进程(Android zygote)从init进程分叉,然后调用execv加载真正的二进制文件(/ system / bin / app_process)来运行。 当我从日志时间戳检查时,fork和" execv系统调用返回"之间几乎没有延迟,但是" execv系统调用返回&#34之间存在意义延迟(大约1s) ;和app_process的#34; main()"。

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

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

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

1 个答案:

答案 0 :(得分:0)

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