Como Stephen Kitt explica , tornando a impressão em zsh o PID seria bastante difícil. Mas você pode obter as informações de outras maneiras.
Você pode pressionar Ctrl + Z para suspender o processo, depois zsh exibe seu PID. E se você quiser matá-lo, tente pressionar Ctrl + C primeiro, para eliminá-lo diretamente. Se Ctrl + C falhar, tente Ctrl + \ para um kill mais difícil ( Ctrl + C envia SIGINT, que convencionalmente diz ao programa para parar sua ação atual e devolver o controle ao usuário; Ctrl + \ envia SIGQUIT, que convencionalmente diz a um programa para travar com força). Você pode fazer isso até mesmo dentro do Emacs: no modo Shell, pressione C-c C-z
para passar C-z
para o terminal, C-c C-c
para passar C-c
, C-c C-\
para passar C-\
. No modo Prazo, C-z
e C-\
são passados diretamente, mas você precisa de C-c C-c
para passar um único C-c
.
Se o processo alterar as configurações do terminal ou bloquear os sinais, uma maneira conveniente de localizá-lo para matar é por terminal. Descubra o que é o terminal; você pode fazer isso com o comando tty
dentro do terminal. Você pode fazer esta parte do seu prompt ou parte do título do terminal (eu coloquei no título do terminal). O Emacs não exibe o título do terminal, mas dá acesso às informações avaliando a seguinte expressão:
(process-tty-name (get-buffer-process (current-buffer)))
Para avaliar uma expressão na maioria dos modos, incluindo o modo Shell, digite M-:
e insira a expressão. No modo Prazo, digite C-c M-x eval-expression RET
e insira a expressão. Se você usar isso com frequência, vincule o seguinte comando a uma chave nos modos relevantes:
(defun buffer-process-tty-name ()
(interactive)
(let ((tty (process-tty-name (get-buffer-process (current-buffer)))))
(if (interactivep) (message "%s" tty))
tty))
Depois de saber o nome do terminal, você pode usar, por exemplo, ps -t pts/42
ou pgrep -t pts/42
para listar os processos anexados a esse terminal.