pipe possible to an already running process?

  • Thread starter .rhavin grobert
  • Start date
R

.rhavin grobert

hi there;-)

I have a little inter-process-communication problem...
_______________________

Lets say you have two Skripts [#A and #B]. #A is already running and
has left it's PID ($$) in a file, waiting inside a loop for one or more
instances of #B.
#B is invoced by the web-user, reads the file and now has to establish
a connection to #A - just knowing it's PID and sending a string to #A
containing something like:
'Hi, my ID is $$'
#A will accept the connection, receive the string and connect to #B in
return.
_______________________

The problem is that I dont know how to do that practically;-|

I tryed kill / @SIG, but that doesnt give me the possibility to send
strings (unless i subclass 127 SIGs and transform my string into 7bit;
this will be the last possibility i'd choose;-)

Another try of mine was a pipe() in #A and #B, but i dont fork a single
prog, i have two different ones already running and simply didn't find
a way to exchange the pipe-handles between the programs.

I've read perlipc and spend a day googlin' but still dont have a clue,
so any help or some URL to a source doing something similar would be
fantastic.

-.rhavin;-)
 
A

Anno Siegel

..rhavin grobert said:
hi there;-)

I have a little inter-process-communication problem...

Yes, we've heard you the first couple of times. Don't post the
same question repeatedly.

Anno
 
B

Bodo Eing

..rhavin grobert said:
hi there;-)

I have a little inter-process-communication problem...
_______________________

Lets say you have two Skripts [#A and #B]. #A is already running and
has left it's PID ($$) in a file, waiting inside a loop for one or more
instances of #B.
#B is invoced by the web-user, reads the file and now has to establish
a connection to #A - just knowing it's PID and sending a string to #A
containing something like:
'Hi, my ID is $$'
#A will accept the connection, receive the string and connect to #B in
return.
_______________________

The problem is that I dont know how to do that practically;-|

I tryed kill / @SIG, but that doesnt give me the possibility to send
strings (unless i subclass 127 SIGs and transform my string into 7bit;
this will be the last possibility i'd choose;-)

Another try of mine was a pipe() in #A and #B, but i dont fork a single
prog, i have two different ones already running and simply didn't find
a way to exchange the pipe-handles between the programs.

I've read perlipc and spend a day googlin' but still dont have a clue,
so any help or some URL to a source doing something similar would be
fantastic.

-.rhavin;-)

What you want is synchronous client/server communication. perlipc
provides some hints in the "Sockets: Client/Server Communication" section.

Several solutions:

1. Let #A and #B communicate via temporary files. This may require the
least modifications to your existing code, but needs some thoughts on
file locking and precautions in case your communication gets out of
sync. This solution ist not very effective and not very robust, but it
has worked for me stably with "low volume" communication (approx. 10
request/response cycles per second).

2. Reconsider your design and try to write all of it as an
Apache/mod_perl app, obviating the need for two separate scripts (best
but hardest alternative, requires most skills and requires control over
your web server).

3. Use http: Wrap #A into HTTP::Daemon or HTTP::Server::Simple and let
#B communicate with #A via LWP::Simple or LWP::UserAgent. If you got so
far, you may find that #B is superfluous, since the user's browser can
now directly communicate with #A. You may then be tempted to shift all
of #B's functionality (e.g., request parsing, HTML generation) to #A.
When you have done this, you will find that you have solution 2 with
(some of) the Apache part written by you in Perl. It's up to you to know
if this is a good idea. So this solution is only of some value if you
restrict #A's functionality to serving the data, and #B running as a CGI
script, doing all the rest. I guess that this is the basic design you
have chosen already anyways.

4. Do not mess around with forks and pipes on the low level.

Regards

Bodo
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top