【发布时间】:2013-01-24 21:08:25
【问题描述】:
基本上,我有这个功能。在 fgets 之后,我希望父母通过将其 play 变量更改为 0 来让孩子停止。我该怎么做?
void readQuestion(char * question) {
int play = 1;
char inputline[256];
int s;
char * holder;
int p = fork();
if (p == 0) {
while(play) {
holder = strsep(&question," ");
if(holder) {
printf("%s\n",holder);
sleep(1);
}
else{
play = 0;
}
}
}
else {
fgets(inputline,256,stdin);
printf("%s",inputline);
kill();
}
}
【问题讨论】:
-
您必须找到一种在进程之间共享数据的方法,这是
fork()自己无法做到的。您可以在每个示例、信号中使用共享内存,或者只使用多线程。 -
你认为我可以通过父进程杀死子进程?如果是这样,那将是什么代码?
-
一旦你
fork()你有两个独立的进程,如果没有某种形式的IPC,比如管道,它们就无法交互。 -
@AhsanQureshi:您始终可以在子进程中配置信号处理程序并从父进程发送信号。只是杀了孩子,似乎不太干净。这也是您了解线程或至少是信号的绝佳机会。
标签: c multithreading fork