help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to communicate with a running external process with given PID?


From: Pascal J. Bourguignon
Subject: Re: How to communicate with a running external process with given PID?
Date: Sat, 20 Jul 2013 16:09:58 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.2 (gnu/linux)

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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]