¿Qué hace kill -USR1 %1?

¿Qué hace kill -USR1 %1?

Tengo dos comandos a continuación y no sé qué están haciendo.

¿Qué hacen estos comandos respectivamente?

kill -USR1 %1
kill $(pidof vlc)

Respuesta1

kill -USR1 %1envía la "señal definida por el usuario #1" (también conocida como "SIGUSR1") al primer proceso secundario en segundo plano del proceso de shell actual. Si ese proceso en segundo plano ha configurado una función de controlador de señal para la señal USR1, esa función se ejecutará. Si el proceso objetivo no tiene un controlador de señal para esa señal, el proceso objetivo terminará.

kill $(pidof vlc)envía la señal de "terminar" (SIGTERM) al vlcproceso.

Repasemos el escenario completo OP descrito en un comentario en otra respuesta:

Un usuario abre una nueva ventana con un shell Unix en su escritorio e inicia dos programas de la siguiente manera:
emacs &

Esto inicia el editor de texto de Emacs en segundo plano, convirtiéndolo en el primer trabajo en segundo plano (%1).

vlc ti2_intro.mp4

Esto inicia el reproductor de video VLC en primer plano para reproducir el ti2_intro.mp4video.

Mientras se reproduce Videoti2_intro.mp4, el usuario presiona Ctrl-z en la ventana del shell.

Esto interrumpe el proceso secundario en primer plano, que es VLC. Eso significa que VLC se detuvo temporalmente pero no se canceló. Está en estado suspendido. Ahora es proceso %2.

Ahora [ella emite] el comando shell jobs,

Eso le permite ver qué procesos secundarios están adjuntos a este proceso de shell. Probablemente aparezca emacscomo %1y vlccomo%2

seguido por:
bg %2

Esto reanuda VLC en segundo plano, para que el video aún pueda reproducirse, sin bloquear el shell, para que pueda emitir más comandos del shell mientras se reproduce.

kill -USR1 %1

Esto envía la "señal 1 definida por el usuario" a emacs. Emacs permite a los usuarios definir sus propios controladores de señales, por lo que es difícil saber qué hizo esta señal sin conocer los detalles de su configuración de Emacs. A menudo se utiliza para activar el depurador en el entorno de programación Lisp "elisp" de Emacs.

Un poco más tarde, da el comando de shell [¿Creo que OP omitió un comando aquí?] y luego presiona Ctrl-c.

No está claro qué comando OP pudo haber dejado aquí, pero supongo que ejecutó un comando que no salió inmediatamente y luego usó Ctrl-c para salir.

Poco después da los siguientes comandos en la misma ventana de Shell:
kill $(pidof vlc)

Esto mata (termina) el proceso VLC.

Respuesta2

kill finaliza un proceso listado (o envía una señal al proceso pidiéndole que se elimine).

En el primer caso, se envía una señal al progreso para pedirle que se elimine (lo que sólo hará si ha sido codificado; un programa así codificado se limpiará y saldrá). %1 significa "trabajo1" Trabajo1 es un proceso que se ejecuta en segundo plano y está asociado con su sesión actual (consulte¿Cuál es el significado de matar %1?)

En el segundo caso, el comando busca los ID de proceso de vlc y los finaliza.

información relacionada