unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* trying to fork away from Emacs in a sub-process from elisp
@ 2005-08-09 20:57 Nic Ferrier
  2005-08-10  9:21 ` Ehud Karni
  0 siblings, 1 reply; 2+ messages in thread
From: Nic Ferrier @ 2005-08-09 20:57 UTC (permalink / raw)


I'm writing a tiny image viewer to be used in conjunction with emacs.

I've constructed the viewer so that it need only start once. It sets
up a named pipe so that all subsequent invocations talk to the initial
program over the named pipe (imagemagick is supposed to do this with
the -remote option, but it doesn't work).

I realize that I *could* implement the
when-is-the-process-the-first-process logic in elisp... but I thought
it was simpler and neater to have the client program simply daemonize
itself on the fifo setup invocation.

Trouble is, when the program daemonizes, Emacs doesn't seem to
recognize it and carries on waiting (waiting for what I'm not sure).

Is there some reason why client programs cannot daemonize when started
by emacs?



For reference, my client program is written in python and is following
this basic procedure:

  fork
    child:
      setsid
      fork
         child:
            chdir /
            close stdout
            close stdin
            close stderr



Nic Ferrier

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: trying to fork away from Emacs in a sub-process from elisp
  2005-08-09 20:57 trying to fork away from Emacs in a sub-process from elisp Nic Ferrier
@ 2005-08-10  9:21 ` Ehud Karni
  0 siblings, 0 replies; 2+ messages in thread
From: Ehud Karni @ 2005-08-10  9:21 UTC (permalink / raw)
  Cc: emacs-devel

On Tue, 09 Aug 2005 21:57:52 +0100, Nic Ferrier wrote:
>
> I'm writing a tiny image viewer to be used in conjunction with emacs.
>
> I've constructed the viewer so that it need only start once. It sets
> up a named pipe so that all subsequent invocations talk to the initial
> program over the named pipe (imagemagick is supposed to do this with
> the -remote option, but it doesn't work).
>
> I realize that I *could* implement the
> when-is-the-process-the-first-process logic in elisp... but I thought
> it was simpler and neater to have the client program simply daemonize
> itself on the fifo setup invocation.
>
> Trouble is, when the program daemonizes, Emacs doesn't seem to
> recognize it and carries on waiting (waiting for what I'm not sure).
>
> Is there some reason why client programs cannot daemonize when started
> by emacs?
>
>
>
> For reference, my client program is written in python and is following
> this basic procedure:
>
>   fork
>     child:
>       setsid
>       fork
>          child:
>             chdir /
>             close stdout
>             close stdin
>             close stderr
>

I don't know python, but I wrote a small bash script for the same
purpose. I background with nohup. Below are my lisp and bash code.
Also a ps output when displaying 3 files: a doc, a tiff, an html.

Ehud.


(defun ek-view-this-file ()
  "View this file as graphic (on X) in background"
       (interactive)
       (let ((files (dired-get-marked-files t current-prefix-arg)))
           (dired-do-shell-command "ek-view.sh *" t files)))

(define-key dired-mode-map  "s"  'ek-view-this-file)


#! /bin/sh
# View (on X) a graphic file (arg)
# --------------------------------------------------

xmsg ()
{
   BGC=${2:-khaki}
   SPC="                  "
   nohup xmessage \
       -background $BGC -foreground Black -center -file "$1"   \
       -title "$1" -xrm "$1.Scroll:whenNeeded"                 \
       -buttons "$SPC E x i t $SPC"  >  /dev/null &
   sleep 1                                 # allow xmessage to start
}
# ----------------------------------------------------------------------

exec 2>> /dev/null                         # do not show anything !

case `which display` in
    "/usr/bin/"* ) VIEW=display ;;         # use display (from Image Magic)
       *   )   VIEW=xview ;;               # any other case
esac

case `which firefox` in
    "/usr/bin/"* ) HTMV=firefox ;;         # use firefox (when available)
       *   )   HTMV=mozilla ;;             # no firefox, use mozilla
esac

for FLN in "$@"
do
    lFLN=`echo "$FLN" | tr "A-Z" "a-z"`    # name in lower case
    case "$lFLN" in
      *htm | *html)                                # browser
               URL=file://`pwd`/"$FLN"             # file URL
               nohup /usr/bin/$HTMV "$URL" > /dev/null & ;;    # html

      *pdf )   nohup xpdf "$FLN" > /dev/null & ;;  # PDF file

      *mpg | *mpeg )
               nohup xanim "$FLN" > /dev/null & ;; # MPEG - movie

       *.doc )                                     # M$ Word document
           catdoc "$FLN" | fribidi --charset ISO8859-8 --width 90 --rtl > "${FLN}_h_txt"
           xmsg "${FLN}_h_txt"                     # show message
           catdoc "$FLN" | fribidi --charset ISO8859-8 --width 90 --ltr > "${FLN}_e_txt"
           xmsg "${FLN}_e_txt" cyan
           sleep 2                                 # Allow xmessage to start
           rm -f "${FLN}_h_txt" "${FLN}_e_txt" ;;  # remove input

       *.txt )
           xmsg "$FLN"                             # show message
           cat "$FLN" | fribidi --charset ISO8859-8 --width 90 --ltr > "${FLN}_e_txt"
           xmsg "${FLN}_e_txt" cyan
           sleep 2                                 # Allow xmessage to start
           rm -f "${FLN}_e_txt" ;;                 # remove input

       * ) nohup $VIEW "$FLN" > /dev/null & ;;     # any other picture
    esac
done

exec sleep 2                   # Don't kill STARTING background processes

############################## ek-view.sh ##############################


 UID  PID  PPID   SID  START    TIME     COMMAND
ehud  7100     1  6546   Jul 26 07:14:30 emacs-21.3 -geometry 130x62+0+0 /procom/home/ehud/emacs-21

ehud 26767     1 26745 12:03:04  0:00 xmessage -background khaki -foreground Black -center -file Simon.405.doc_h_txt -title
ehud 26771     1 26745 12:03:05  0:00 xmessage -background cyan -foreground Black -center -file Simon.405.doc_e_txt -title S
ehud 26778     1 26745 12:03:08  0:01 display Ishur-mas-2006.tiff
ehud 26783     1 26745 12:03:08  0:00 /bin/sh /usr/lib/firefox-1.0.4/firefox file:///procom/home/ehud/mail/tmp/zeev-crtf.htm
ehud 26800 26783 26745 12:03:27  0:00 /bin/sh /usr/lib/firefox-1.0.4/run-mozilla.sh /usr/lib/firefox-1.0.4/firefox-bin file:
ehud 26805 26800 26745 12:03:27  0:03 /usr/lib/firefox-1.0.4/firefox-bin file:///procom/home/ehud/mail/tmp/zeev-crtf.html



--
 Ehud Karni           Tel: +972-3-7966-561  /"\
 Mivtach - Simon      Fax: +972-3-7966-667  \ /  ASCII Ribbon Campaign
 Insurance agencies   (USA) voice mail and   X   Against   HTML   Mail
 http://www.mvs.co.il  FAX:  1-815-5509341  / \
 GnuPG: 98EA398D <http://www.keyserver.net/>    Better Safe Than Sorry

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2005-08-10  9:21 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-08-09 20:57 trying to fork away from Emacs in a sub-process from elisp Nic Ferrier
2005-08-10  9:21 ` Ehud Karni

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).