C++ 使用fork()c++;
我在共享内存中有一个字符串(C++ 使用fork()c++;,c++,string,fork,shared-memory,C++,String,Fork,Shared Memory,我在共享内存中有一个字符串(fileContents),由9行组成: sprintf(shared_memory, fileContents.c_str()); 我想调用fork()来创建与行数相同的进程。这些过程将操纵每一行。但是,调用fork()时,我不知道从哪里开始。我看到的每个示例都只是返回父进程和子进程的进程ID,而没有显示进程如何或何时执行某些操作 任何指导都将不胜感激,谢谢 我看到的每个示例都只是返回父进程和子进程的进程ID 那是不对的 父进程将获取子进程的进程id,但子进程将知
fileContents
),由9行组成:
sprintf(shared_memory, fileContents.c_str());
我想调用fork()
来创建与行数相同的进程。这些过程将操纵每一行。但是,调用fork()
时,我不知道从哪里开始。我看到的每个示例都只是返回父进程和子进程的进程ID,而没有显示进程如何或何时执行某些操作
任何指导都将不胜感激,谢谢
我看到的每个示例都只是返回父进程和子进程的进程ID
那是不对的
父进程将获取子进程的进程id,但子进程将知道它是子进程,因为fork()
返回0
此代码将分叉9次,每个子级都执行特定的工作
for( int line = 1; line <= 9; ++line ) // *cough*
{
if ( fork() == 0 )
{
// Child process. Handle line, and exit()
}
}
用于(int line=1;line您希望进程在分叉后继续运行相同的程序,还是启动不同的程序?在前一种情况下,只需在分叉后继续运行其余的程序,在后一种情况下,您希望调用exec
在子进程中运行新的可执行文件process@JonathanWakely我不确定我能不能来完全理解你的问题,但在每一行被操作之后,我将打印出共享内存,程序将结束。谢谢你的回答,它帮助退出了一点。再问一个问题。我似乎挂断了子进程。它们是对象吗?你能解释一下它们是如何使用的吗。谢谢=)。你不“使用”进程,进程是运行程序的操作系统实体,它从main()
开始,执行程序中的所有代码,直到退出。系统调用fork()
创建一个当前进程的相同副本,该进程运行同一程序的同一行。在调用fork()
之前,您有一个进程运行代码,在fork()
之后,您有两个进程运行代码。在尝试使用fork()执行任何操作之前,您需要确保了解这一点
,否则你会很困惑。@Nikkisixx2“什么是过程”是一个答案冗长的问题。