pipe possible to an already running process?

Discussion in 'Perl Misc' started by .rhavin grobert, Jan 8, 2006.

  1. 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;-)
    .rhavin grobert, Jan 8, 2006
    #1
    1. Advertising

  2. .rhavin grobert

    Anno Siegel Guest

    ..rhavin grobert <> wrote in comp.lang.perl.misc:
    > 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
    --
    If you want to post a followup via groups.google.com, don't use
    the broken "Reply" link at the bottom of the article. Click on
    "show options" at the top of the article, then click on the
    "Reply" at the bottom of the article headers.
    Anno Siegel, Jan 9, 2006
    #2
    1. Advertising

  3. .rhavin grobert

    Bodo Eing Guest

    ..rhavin grobert wrote:

    > 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
    Bodo Eing, Jan 9, 2006
    #3
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jules Stevenson
    Replies:
    0
    Views:
    261
    Jules Stevenson
    Jan 6, 2009
  2. Pito Salas
    Replies:
    11
    Views:
    224
    Robert Klemme
    Aug 26, 2009
  3. Richard
    Replies:
    2
    Views:
    124
    Brian McCauley
    May 27, 2005
  4. Keith
    Replies:
    2
    Views:
    73
    Anno Siegel
    Sep 20, 2005
  5. .rhavin grobert

    pipe to an already running process?

    .rhavin grobert, Jan 8, 2006, in forum: Perl Misc
    Replies:
    0
    Views:
    124
    .rhavin grobert
    Jan 8, 2006
Loading...

Share This Page