peo*_*oro 51 c c++ linux bash fork
如果我运行经典的bash forkbomb:
:(){ :&:&};:
Run Code Online (Sandbox Code Playgroud)
我的系统在几秒钟后挂起.
我试着用C编写一个forkbomb,这里是代码:
#include <unistd.h>
int main( )
{
while(1) {
fork();
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,系统的响应速度会降低,但我可以在按下时杀死该过程(即使在几分钟后)^C.
上面的代码与我发布的原始bash forkbomb不同:它更像是:
:( )
{
while true
do
:
done
}
Run Code Online (Sandbox Code Playgroud)
(我没有测试它;不知道它是否挂起系统).
所以我也尝试实现原始版本; 这里的代码:
#include <unistd.h>
inline void colon( const char *path )
{
pid_t pid = fork( );
if( pid == 0 ) {
execl( path, path, 0 );
}
}
int main( int argc, char **argv )
{
colon( argv[0] );
colon( argv[0] );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但仍然没有:我可以运行它然后轻易杀死它.它没有挂我的系统.
为什么?
关于bash forkbombs有什么特别之处?是因为bash使用了更多的内存/ CPU吗?因为bash进程调用了比我更多的系统调用(例如,访问文件系统)?
Ara*_*ion 44
那个C程序很小,非常小.另外,fork()这样的程序是非常非常有效的.然而,诸如Bash之类的解释器在RAM使用方面要昂贵得多,并且需要一直访问磁盘.
尝试运行它更长时间.:)