mongodb - main 函数入口
2013-03-08 14:44
686 查看
main函数在: /src/mongo/db/db.cpp
主函数实现的步骤在: main -> mongoDbMain
主要工作:
参数解析
内存文件flush到硬盘 (线程)
服务监听
详细事情:
检测CPU是大端还是小端,大端就不支持了
解析输入的命令参数
每隔一分钟对所有内存映射文件进行flush操作到磁盘dataFileSync.go();
服务监听 initAndListen
主函数实现的步骤在: main -> mongoDbMain
主要工作:
参数解析
内存文件flush到硬盘 (线程)
服务监听
详细事情:
检测CPU是大端还是小端,大端就不支持了
解析输入的命令参数
每隔一分钟对所有内存映射文件进行flush操作到磁盘dataFileSync.go();
服务监听 initAndListen
1234 static int mongoDbMain(int argc, char* argv[], char **envp) { 1235 static StaticObserver staticObserver; 1236 1237 getcurns = ourgetns; 1238 1239 setupSignalHandlers(); 1240 1241 dbExecCommand = argv[0]; // 此处莫非是暗示我们所有的binary都是由这一个main所在文件build出来的? 1242 1243 srand(curTimeMicros()); // 设置随机数种子 1244 1245 { 1246 unsigned x = 0x12345678; 1247 unsigned char& b = (unsigned char&) x; 1248 if ( b != 0x78 ) { 1249 out() << "big endian cpus not yet supported" << endl; 1250 return 33; 1251 } 1252 } 1253 1254 if( argc == 1 ) 1255 cout << dbExecCommand << " --help for help and startup options" << endl; 1256 1257 // 输入参数解析 1258 processCommandLineOptions(std::vector<std::string>(argv, argv + argc)); 1259 mongo::runGlobalInitializersOrDie(argc, argv, envp); 1260 CmdLine::censor(argc, argv); 1261 1262 if (!initializeServerGlobalState()) 1263 ::_exit(EXIT_FAILURE); 1264 1265 // Per SERVER-7434, startInterruptThread() must run after any forks 1266 // (initializeServerGlobalState()) and before creation of any other threads. 1267 startInterruptThread(); 1268 1269 dataFileSync.go(); // 将内存数据flush到磁盘 1270 1271 #if defined(_WIN32) 1272 if (ntservice::shouldStartService()) { 1273 ntservice::startService(); 1274 // exits directly and so never reaches here either. 1275 } 1276 #endif 1277 1278 StartupTest::runTests(); 1279 initAndListen(cmdLine.port); // 服务监听 1280 dbexit(EXIT_CLEAN); 1281 return 0; 1282 }
相关文章推荐
- 入口函数 main 和 WinMain 的返回值
- vc++ main系列入口函数
- windows函数入口问题 UNREFERENCED_PARAMETER的用处 _tWinMain与wWinMain又有什么区别
- 第三次讲座盲点整理(编译与链接)——入口函数一定是main?
- C++ 程序启动入口函数main还是winmain?
- 程序入口函数 main
- 背景建模技术(三):背景减法库(BGS Library)的基本框架与入口函数main()的功能
- Mongodb源码分析--主程序入口main()
- Java中static方法、程序入口函数main方法的继承问题
- C语言的入口函数不一定叫main
- [C#] 了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数
- C++修改入口函数名Main的方法
- C语言的入口函数不一定叫main
- Mongodb源码分析--主程序入口main()
- C++修改入口函数名Main的方法
- 背景建模技术(三):背景减法库(BGS Library)的基本框架与入口函数main()的功能
- java入口函数为什么是public static void main(String args[])
- main是C/C++的入口函数么?
- 背景建模技术(三):背景减法库(BGS Library)的基本框架与入口函数main()的功能
- Mongodb源码分析--主程序入口main()