static void
sig_usr(int signo)
{
cout << "sig_usr" << endl;
sigFlag = 1;
return;
}
void sig_conn()
{
FILE *f = NULL;
char chFileName[20];
strcpy(chFileName,MY_PATH);
strcat(chFileName,"/test.txt");
if ((f = fopen(chFileName,"w+")) == NULL)
cerr << "open file error" << endl;
static volatile int i = 0,sigFlag = 0;
int iLength = 0,status;
char chText[20];
pid_t pid = NULL;
static sigset_t newmask,oldmask,zeromask;
sigemptyset(&zeromask);
sigemptyset(&newmask);
if (signal(SIGUSR1,sig_usr) == SIG_ERR)
cerr << "signal SUGUSR1 ERROR" << endl;
if (signal(SIGUSR2,sig_usr) == SIG_ERR)
cerr << "signal SUGUSR2 ERROR" << endl;
sigaddset(&newmask,SIGUSR1);
sigaddset(&newmask,SIGUSR2);
if (sigprocmask(SIG_BLOCK,&newmask,&oldmask) < 0)
cerr << "sigprocmask error"<< endl;
if ((pid = fork()) < 0)
cerr << "fork error!" << endl;
else if (pid ==0)
{
//child
while (i < 100)
{
//wait_parent();
if (sigFlag == 0)
{
cout << "child: sigsuspend" << endl;
sigsuspend(&zeromask);
}
cout << "child: wait end" << endl;
sigFlag = 0;
sprintf(chText,"child inserted: %d\n",++i);
cout << chText << endl;
fwrite(chText,strlen(chText),1,f);
//tell_parent()
cout << "tell_parent()" << endl;
kill(getppid(),SIGUSR2);
//wait_parent();
}
}
else
{
//parent
cout << "child pid is " << pid << endl;
while (i < 100)
{
sprintf(chText,"parent inserted: %d\n",++i);
cout << chText << endl;
fwrite(chText,strlen(chText),1,f);
//tell_child()
cout << "tell_child()" << endl;
kill(pid,SIGUSR1);
//wait_child();
if (sigFlag == 0)
{
cout << "parent: sigsuspend" << endl;
sigsuspend(&zeromask);
}
cout << "parent: wait end" << endl;
sigFlag = 0;
}
if (wait(&status) != pid)
cerr << "wait error" << endl;
else
cout << "wait success" << endl;
}
fclose(f);
return;
}
我的程序如上,但运行后发现父进程不能发信号给子进程,哪位大虾能指点一下啊,谢谢咯!!!!!!!!!!!!!!!!!
---------------------------------------------------------------
static void
sig_usr(int signo)
{
//加上下面一句:
signal( signo, sig_usr );
cout << "sig_usr" << endl;
sigFlag = 1;
return;
}
---------------------------------------------------------------
为何我定义的变量i(static volatile int i)却在父进程和子进程间不能指向同一变量,而是各自指向自己的值呀,我该如何定义才能使父子进程指向同一变量i
---------------------------------
父子进程有独立的进程空间,用某种共享的机制(ipc)可以做到,不是简单的static volatile int i来实现的。建议先了解了解fork的机制在来实现你的功能。