Linux - 有没有办法在不需要新进程的情况下调用系统调用(bash脚本)?

时间:2014-09-02 17:48:58

标签: c++ linux

在我的c ++应用程序中,我需要运行几个bash脚本。 (有时是常规系统调用,即“关闭”,“rm”)。 使用“系统”调用时,它会分叉一个新进程。

有没有办法在不需要新流程的情况下调用“系统”?

3 个答案:

答案 0 :(得分:1)

不容易。但是如果你愿意为你的设置增加复杂性,你可以:

  1. 让你的程序自己执行rmshutdown等会做的系统调用(不过你会重新发明轮子)
  2. 编写一个脚本,该脚本侦听端口上给出的命令并执行命令(并保持脚本运行 - 可能作为守护进程)。复杂而脆弱......
  3. 然后你不需要fork()或致电exec ......但是最好只分叉一个新流程,或者使用exec - 我认为这样做没有任何好处在这种情况下不同的事情。

答案 1 :(得分:1)

实际上,标准libc库中存在这些bash命令的类似物。 但是如果你想尝试的话,我还是没有...我想说一下如何利用漏洞? 我的意思是,在这种情况下,将不会有系统调用(排除漏洞利用)。

答案 2 :(得分:0)

不,因为运行脚本意味着运行bash和/或其他可执行二进制文件的实例。

虽然对于大多数常规系统调用都有相应的C函数,当然这不会分叉过程(例如rm的{​​{3}})。

编辑:我知道exec*个函数,但是如果OP想要运行几个命令,那么它们就没用了,可能除了运行最后一个之外。