Skip to contentSkip to conversation

fork + signal

DISCUSSION Suma Choudhary 1 participant 1 message Jul 29, 2005

lore
Share & tools
lore
#0 lore raw

hi all
The parent process gets a message from FIFO . There was one more signal(when a card is inserted) whose signal handler opens the FIFO(O_WRONLY)to msg to itself while it has not opened it for reading (busy somewhere else)........so a deadlock! Thanks for the help otherwise I wud never have read (and re -read) for the FIFO man pages !

regards
suma
ps:check the pseudo code here ........hope I've tracked down the problem right!

The code of parent will be:
main()
{
register signal handlers;
for(;;)

 {
    open(fifo);
    wait for a msg;
    close(fifo);
    spawn_process;/*was here when the process was opening fifo in signal handler*/

}
}
signal_handler()
{
open(fifo,O_WRONLY);/*blocked here */
write(the msg );
close(fifo);
}

Quoted 1 line
Quoted 1 line
Quoted 1 line

"Amit Dang" <[email protected]> 07/29/05 10:13 AM >>>

It seems that the main process has not yet finished with the processing of "insert card" and it was interrupted by SIGCHLD (as pointed out by San Ron Michael Khu). I am assuming your code to be something like this

Main Process:

{
    CardInserted()
    {
        SpawnChild();
        /*Rest of the processing */
        ....
    }
}

Chlid Process:

{
    CardRemoved()
    {
        /* Processing */

    }
    /* Kill itself */
}

I have few questions (assuming the above code structure):
1 ) After child has detected Card Removal, is CardInserted() function required to be complete its execution?
2 ) Can SpawnChild() be the last statement of CardInserted() function? 3 ) Is there any kind of locking being used in CardInserted() function? 4 ) Can CardInserted() function be called multiple times simultaneously?

It would be better if you can share the code.

Regards,
Amit Dang
----- Original Message -----
From: "Ron Michael Khu" <[email protected]>
To: "Suma Choudhary" <[email protected]>; "linux-c-programming" <[email protected]>
Sent: Friday, July 29, 2005 8:33 AM
Subject: Re: fork + signal

Quoted 8 lines

state-machine processing problems?

perhaps the mother process was not yet finished performing the function for processing the "card insertion message"
when the child process raised a SIGCHLD... perhaps a system call or a task done by the parent process was interrupted when the SIGCHLD was received by the signal handler..

Quoted 12 lines

aside from doing a "fork" (and an "exec"), what are other tasks are done whenever a card insertion message is received??

can u show some code? both for the parent and child processes

Quoted 3 lines · Suma Choudhary

Sorry for being so vague!
OK the situation is like this:
I've a process which after receiving a card insertion message spawns

another process.

Quoted 1 line
Quoted 1 line

Now when the insertion and removal of card is done at a fast rate, the

spawning of the child stops after certain time:-(

Quoted 6 lines
Quoted 6 lines

This when checked with a slower rate works fine.

When the card is removed the child process detects it and kills itself. THe parent gets a SIGCHLD and "waits" on the child.

Do u see any problem here......should I disable the SIGCHLD before

spawning the child?

Quoted 18 lines
Quoted 18 lines

Thanks for taking the time to consider it.

Regards
suma

Quoted 3 lines
Quoted 3 lines
Quoted 3 lines

r_zaca <[email protected]> 07/28/05 22:03 PM >>>

Suma,

How could a child process send a signal if it is not already created?

Quoted 18 lines
Quoted 4 lines
Quoted 4 lines

hi all
I have this doubt of what happens when a process is still on the way >of forking(+ maybe exec further) a child and there comes a sigchld >signal. (Of course assuming that theres a signal handler for the sigchld

signal.)

Quoted 13 lines
Quoted 10 lines

hopeful of getting an answer
regards
suma

-
To unsubscribe from this list: send the line "unsubscribe

linux-c-programming" in

Quoted 9 lines
Quoted 6 lines

the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

-
To unsubscribe from this list: send the line "unsubscribe

linux-c-programming" in

Quoted 2 lines

the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

-
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html