On 13/12/2021 22:01, Jacob Hrbek wrote: > I wrote this potato-make definition (was simplified): > > #:SRC_BEGIN sheme-mode > #!/usr/bin/env sh > exec guile -s "$0" "$@" > !# > > (use-modules (ice-9 futures) >  (potato make)) > (initialize) > > (: "watch" '() >    (~ (do ((i 1 (1+ i))) >       ((> i 6)) >     (future (system >      "emacs")) >     ;;(let ((emacs_pid (getpid))) >      ;; (kill emacs_pid SIGTERM))))) > > (execute) > #:SRC_END > > expecting to capture emacs's pid and kill it, but the issue is that using `getpid` gets me the PID of potato-make and `getppid` of the shell -> How can i capture just the emacs's pid? > > FWIW the projected end-goal is 3600 loop that checks if the `my-theme.el` file has been changed to re-launch emacs with the theme loaded used for theme development. > Hello, I hope this day finds you well. While Guile does not directly provide a function to get the PID of an arbitrary process, we could use pgrep to find what we need. #+begin_src scheme (use-modules (ice-9 popen) (ice-9 textual-ports)) (map string->number (string-split (let ((port (open-input-pipe "pgrep emacs")) (s (get-string-all port))) (close-pipe port) s) #\newline)) ;; => (1220 #f) #+end_src I hope this helps! Vale, -Tim