]> git.eshelyaron.com Git - emacs.git/commitdiff
Minor improvements for tramp-interrupt-process, documentation
authorMichael Albinus <michael.albinus@gmx.de>
Thu, 24 Aug 2017 13:53:56 +0000 (15:53 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Thu, 24 Aug 2017 13:53:56 +0000 (15:53 +0200)
* doc/lispref/processes.texi (Signals to Processes):
* etc/NEWS: Document interrupt-process-functions.

* lisp/net/tramp.el (tramp-interrupt-process): Test also for
`process-live-p'.

* src/process.c (Vinterrupt_process_functions): Fix docstring.

* test/lisp/net/tramp-tests.el (tramp-test28-interrupt-process):
Extend test.

doc/lispref/processes.texi
etc/NEWS
lisp/net/tramp.el
src/process.c
test/lisp/net/tramp-tests.el

index 292d55d50c54761f2e71237a8e1dbb757ecfd264..45e04a5ab88a49163fe4ada82472e094032060b1 100644 (file)
@@ -1351,6 +1351,22 @@ integer); that allows you to send signals to processes that are not
 children of Emacs.  @xref{System Processes}.
 @end deffn
 
+Sometimes, it is necessary to send a signal to a non-local
+asynchronous process.  This is possible by writing an own
+@code{interrupt-process} implementation.  This function must be added
+then to @code{interrupt-process-functions}.
+
+@defvar interrupt-process-functions
+This variable is a list of functions to be called for
+@code{interrupt-process}.  The arguments of the functions are the same
+as for @code{interrupt-process}.  These functions are called in the
+order of the list, until one of them returns non-@code{nil}.  The
+default function, which shall always be the last in this list, is
+@code{internal-default-interrupt-process}.
+
+This is the mechanism, how Tramp implements @code{interrupt-process}.
+@end defvar
+
 @node Output from Processes
 @section Receiving Output from Processes
 @cindex process output
index a9e2f5ae3f1fde6b7857d537654e2289ee165eb8..bf59749a62b6ddde3f01c0c9ab13e266bf24d9ed 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -334,6 +334,13 @@ These variables are for users who would like to avoid the small
 probability of data corruption due to techniques Emacs uses to recover
 in these situations.
 
++++
+** 'interrupt-process' consults now the list
+'interrupt-process-functions', which function has to be called in
+order to deliver the SIGINT signal.  This allows Tramp to send the
+SIGINT signal to remote asynchronous processes.  The hitherto existing
+implementation has been moved to 'internal-default-interrupt-process'.
+
 +++
 ** File local and directory local variables are now initialized each
 time the major mode is set, not just when the file is first visited.
@@ -987,6 +994,9 @@ manual documents how to configure ssh and PuTTY accordingly.
 'tramp-remote-process-environment' enables reading of shell
 initialization files.
 
+---
+*** Tramp is able now to send SIGINT to remote asynchronous processes.
+
 ---
 *** Variable 'tramp-completion-mode' is obsoleted.
 
index 2aa9a6b9859e33cb9360eb7cb2a27d82a2ca759c..ef3e62ccce3a7afec6d05f9bf8ee9250da2faded 100644 (file)
@@ -4393,7 +4393,7 @@ Only works for Bourne-like shells."
               (t                  process)))
        pid)
     ;; If it's a Tramp process, send the INT signal remotely.
-    (when (and (processp proc)
+    (when (and (processp proc) (process-live-p proc)
               (setq pid (process-get proc 'remote-pid)))
       (tramp-message proc 5 "Interrupt process %s with pid %s" proc pid)
       ;; This is for tramp-sh.el.  Other backends do not support this (yet).
index e7ee99ab3d95b0754a8aa924f16a66f65cfb1e3c..730caea677f9cedf2b6377b7c10d0892444e943b 100644 (file)
@@ -8192,8 +8192,8 @@ The variable takes effect when `start-process' is called.  */);
   Vprocess_adaptive_read_buffering = Qt;
 
   DEFVAR_LISP ("interrupt-process-functions", Vinterrupt_process_functions,
-              doc: /* List of functions to be called for `interrupt-function'.
-The arguments of the functions are the same as for `interrupt-function'.
+              doc: /* List of functions to be called for `interrupt-process'.
+The arguments of the functions are the same as for `interrupt-process'.
 These functions are called in the order of the list, until one of them
 returns non-`nil'.  */);
   Vinterrupt_process_functions = list1 (Qinternal_default_interrupt_process);
index 85ed6467220a26f801f1217a2a93e21c811376b5..55f4b52ccdf2632fb34a1d9126cc1e154265d077 100644 (file)
@@ -2966,9 +2966,17 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
        (with-temp-buffer
          (setq proc (start-file-process "test" (current-buffer) "sleep" "10"))
          (should (processp proc))
+         (should (process-live-p proc))
          (should (equal (process-status proc) 'run))
-         (interrupt-process proc)
-         (should (equal (process-status proc) 'signal)))
+         (should (interrupt-process proc))
+         ;; Let the process accept the interrupt.
+          (accept-process-output proc 1 nil 0)
+         (should-not (process-live-p proc))
+         (should (equal (process-status proc) 'signal))
+         ;; An interrupted process cannot be interrupted, again.
+         ;; Does not work reliable.
+         ;; (should-error (interrupt-process proc)))
+         )
 
       ;; Cleanup.
       (ignore-errors (delete-process proc)))))