2013-03-07 56 views
0

我有一个字符串(fileContents),其由一个9行:操纵的字符串在共享存储器中,在共享存储器fork()的C++

sprintf(shared_memory, fileContents.c_str()); 

我想在fork()调用来创建相同数量的作为行处理。这些过程将操纵每一行。但是,我不知道从哪里开始拨打fork()。我看过的每个示例都只是返回父进程和子进程的进程标识,而不显示进程如何或何时执行某些操作。

任何指导将不胜感激,谢谢!

+0

您是否希望进程在分叉或启动其他程序后继续运行相同的程序?在前一种情况下,继续分叉并运行程序的其余部分,在后一种情况下,您希望调用'exec'在子进程中运行新的可执行文件 – 2013-03-07 18:56:10

+0

@JonathanWakely我不确定我完全理解您的问题,但在每一行被操纵后,我只是打印出共享内存,程序将结束。 – Nikkisixx2 2013-03-07 19:21:25

回答

2

我已经看过恰逢例如由返回父母和孩子的进程ID的进程

这是不正确的。

父进程将得到子进程的进程ID,但孩子的过程就会知道它的子过程,因为fork()返回0

该代码将叉9次,每个孩子做具体工作。

for(int line = 1; line <= 9; ++line) // *cough* 
{ 
    if (fork() == 0) 
    { 
     // Child process. Handle line, and exit() 
    } 
} 
+0

感谢您的回复,它帮助退出了一下。还有一个问题。我似乎挂在孩子的进程上。他们是否是对象?你能解释一下它们是如何使用的吗?谢谢=)。 – Nikkisixx2 2013-03-07 19:19:24

+0

你不“使用”一个进程,一个进程就是运行你的程序的操作系统实体,它是从main()开始并执行程序中的所有代码直到它退出为止。 fork()系统调用会创建一个当前进程的(几乎)完全相同的副本,它将运行同一程序的同一行。在调用fork()之前,你有一个进程运行你的代码,在fork()之后,你有两个进程运行你的代码。在试图用'fork()'做更多的事情之前,你需要确保你明白,否则你会感到困惑。 – 2013-03-07 19:29:20

+0

@ Nikkisixx2“什么是一个过程”是一个looooong答案的问题。 – 2013-03-07 19:30:40