在我的c ++应用程序中,我需要运行几个bash脚本。 (有时是常规系统调用,即“关闭”,“rm”)。 使用“系统”调用时,它会分叉一个新进程。
有没有办法在不需要新流程的情况下调用“系统”?
答案 0 :(得分:1)
不容易。但是如果你愿意为你的设置增加复杂性,你可以:
rm
,shutdown
等会做的系统调用(不过你会重新发明轮子)然后你不需要fork()
或致电exec
......但是最好只分叉一个新流程,或者使用exec
- 我认为这样做没有任何好处在这种情况下不同的事情。
答案 1 :(得分:1)
实际上,标准libc库中存在这些bash命令的类似物。 但是如果你想尝试的话,我还是没有...我想说一下如何利用漏洞? 我的意思是,在这种情况下,将不会有系统调用(排除漏洞利用)。
答案 2 :(得分:0)
不,因为运行脚本意味着运行bash和/或其他可执行二进制文件的实例。
虽然对于大多数常规系统调用都有相应的C函数,当然这不会分叉过程(例如rm
的{{3}})。
exec*
个函数,但是如果OP想要运行几个命令,那么它们就没用了,可能除了运行最后一个之外。