2012-01-20 11 views
12

Supongamos que trabaja en un servidor remoto desde un shell local de emacs (comenzó con M-x shell). Si ejecuta un proceso que lleva demasiado tiempo (por ejemplo, un ls en un directorio con una gran cantidad de archivos), le gustaría detener ese proceso (en el terminal se usaría control-c). Intenté C-c C-c pero eso mata todo el shell ... ¿Cómo puedo solo matar el proceso en ejecución en el servidor remoto y no todo el shell?Cómo matar un proceso remoto sin matar el shell (C-c C-c también mata el shell ...)

actualización

Paso a paso:

1) M-x shell (execute on local machine) 
2) ssh [email protected] (execute on local machine) 
3) sleep 60 (execute on remote machine) 
4) C-c C-c (execute in the current shell) 

=> en lugar de estar aún en el host remoto y sólo el comando sleep ser matado, toda la conexión remota está cerrada y están en su máquina local de nuevo.

+0

No puedo reproducir el problema que describes. ¿Qué tal una descripción paso a paso de cómo la experimentas? – Sean

+0

gracias, Sean. Actualicé la pregunta incluyendo una descripción paso a paso –

+0

Tengo exactamente el mismo problema, usando zsh y emacs 21.4.1 así que uno bastante antiguo ... – sandos

Respuesta

21

Cuando sigo los pasos que enumeré, me encuentro nuevamente en el indicador del shell remoto. Estoy usando Emacs 23.1.1.

Me parece que al escribir C-q C-c RET también se interrumpe el proceso remoto, dejándome de nuevo en el indicador remoto del shell. Puede probar eso como un enfoque alternativo.

+1

Hola Sean, gracias por ayudarme. De hecho, funciona 'C-q C-c RET'. Todavía me pregunto por qué 'C-c C-c' no está funcionando. Estoy usando: GNU Emacs 24.0.92.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) de 2012-01-15 en bob.porkrind.org [en Mac OS X 10.7.2]. –

+0

C-q C-c funciona para mí y mis viejos emacs + zsh! ¡Gracias! – sandos

+0

Gracias @Sean, debe incluir [este enlace] (https://www.cs.utah.edu/dept/old/texinfo/emacs18/emacs_8.html) en su respuesta, ya que explica que 'Cq' insertará el el siguiente carácter escrito en el búfer. –

-1

No está claro para mí si quieres matar el comando desde Emacs, pero se podía abrir alternativamente otra conexión o ventana (si está utilizando la pantalla o tmux) y llevar a cabo el estándar

ps aux | grep hungprocess 

y entonces

kill hungprocess_pid 

Por alguna razón, me quedé pensando que tal método no funcionaría y que me gustaría terminar tomando abajo emacs también. He usado ese método varias veces cuando no configuré mi agente de gp pinentry al abrir un archivo encriptado gpg en emacs. Emacs/gpg intenta generar una GUI y, por lo tanto, cuelga emacs, esperando la entrada en la GUI cuando estoy remotamente ssh'ed in.