all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Pascal J. Bourguignon" <pjb@informatimago.com>
To: help-gnu-emacs@gnu.org
Subject: Re: How to communicate with a running external process with given PID?
Date: Sat, 20 Jul 2013 16:09:58 +0200	[thread overview]
Message-ID: <87ip05726h.fsf@informatimago.com> (raw)
In-Reply-To: mailman.1462.1374321447.12400.help-gnu-emacs@gnu.org

Thorsten Jolitz <tjolitz@gmail.com> writes:

> "Pascal J. Bourguignon" <pjb@informatimago.com> writes:
>
>> Thorsten Jolitz <tjolitz@gmail.com> writes:
>>
>>> Hi List, 
>>>
>>> say I want to call another program (more exactly, another Lisp program
>>> that is not Emacs Lisp) from an Emacs Lisp program. 
>
> [..snip..]
>
>>> I could run a server in the external lisp program and use a
>>> network-connection-object to send http-requests (e.g. with the help of
>>> emacs-request.el) via TCP - but that seems to be total overkill for my
>>> requirements.
>
>> Ok, I'll bit the bullet: the only communication channel available to
>> you, a-priori, knowing only the process ID, is the kill(2) syscall.
>> And you're lucky, you can send more than one bit of information with
>> each kill call!
>
> Yes, I should read UNP, but actually I read quite a lot of stuff about
> this topic, but reading about it and starting to use it is not the same
> thing. And I did not know that 'kill is so useful and universal, only
> used it for its core task so far.
>
> But in the light of your answer I think I go for the HTTP client/server
> solution, expecially since the server stuff is all there anyway. 
>
> Thanks for the tips. 

Ok, that's a starting point.

The thing is that you cannot talk to a process that's not ready to talk,
with some protocol.

The summary of unp, is that there are various IPC (Inter Process
Communication) mechanisms:

- signals (kill(2), signal(2)),
- semaphores (semctl, semget, semop, semtimedop)
- messages (msgctl, msgget, msgrct, msgsnd)
- shared memory (shmat, shmctl, shmdt, shmget)
- sockets (listen, accept, read, write, close)
- pipes (pipe, fork, read, write, close)
- named pipes (open, read, write close)
- files (open, read, write close) 

and the only mechanism that does something by default in the receiver is
signals (cf. signal(2) and signal(7)).  Now, of course, most signals are
ignored, and a few others only kill the receiving process by default
(hence the name of kill(2)), which is not much of a communication, but
that's something, contrarily to the other mechanisms, when the receiving
process doesn't do anything about them.


But since you're saying that the process includes a HTTP server, that
means you can open a TCP socket on the port it's listening to, and you
can communicate with the HTTP protocol.

In emacs, you can do that with "network processes":
http://www.gnu.org/software/emacs/manual/html_node/elisp/Network-Processes.html
http://www.gnu.org/software/emacs/manual/html_node/elisp/Processes.html


-- 
__Pascal Bourguignon__                     http://www.informatimago.com/
A bad day in () is better than a good day in {}.  
You know you've been lisping too long when you see a recent picture of George 
Lucas and think "Wait, I thought John McCarthy was dead!" -- Dalek_Baldwin


  parent reply	other threads:[~2013-07-20 14:09 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <mailman.1456.1374311231.12400.help-gnu-emacs@gnu.org>
2013-07-20 10:51 ` How to communicate with a running external process with given PID? Pascal J. Bourguignon
2013-07-22 16:52   ` Rustom Mody
2013-07-22 18:18     ` Pascal J. Bourguignon
2013-07-23  4:44       ` Rustom Mody
2013-07-20 10:52 ` Pascal J. Bourguignon
2013-07-20 11:57   ` Thorsten Jolitz
     [not found]   ` <mailman.1462.1374321447.12400.help-gnu-emacs@gnu.org>
2013-07-20 14:09     ` Pascal J. Bourguignon [this message]
2013-07-22  8:06       ` Thorsten Jolitz
2013-07-22  8:22         ` Aurélien Aptel
2013-07-22  9:43           ` Thorsten Jolitz
2013-07-22 14:15             ` Aurélien Aptel
2013-07-23  7:19               ` Thorsten Jolitz
     [not found]           ` <mailman.1547.1374486226.12400.help-gnu-emacs@gnu.org>
2013-07-22 18:14             ` Pascal J. Bourguignon
2013-07-20  9:06 Thorsten Jolitz
2013-07-22 13:02 ` Kevin Rodgers
2013-07-22 14:12   ` Thorsten Jolitz
2013-07-22 14:42     ` Aurélien Aptel
     [not found]     ` <mailman.1562.1374504168.12400.help-gnu-emacs@gnu.org>
2013-07-22 18:16       ` Pascal J. Bourguignon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ip05726h.fsf@informatimago.com \
    --to=pjb@informatimago.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.