Guardaré el "por qué es una mala idea para después de la respuesta", pero aquí hay algunos trucos que podrías usar. Como no todos pueden realizar pruebas con CC, escojamos Safari para este ejemplo:
ps -ef | grep "Safari "
Primero, agrego un espacio después del nombre del programa para asegurarme de que no sea parte de la ruta. Luego, use un corchete alrededor de un carácter del nombre del proceso, que evite que grep se encuentre a sí mismo. (probablemente hay una forma más elegante de hacer esto, pero este truco funciona bien para mí)
ps -ef | grep "[S]afari "
Esto hace que el comando grep no coincida con Safari: los corchetes le permitirían buscar [SZ]afari
y coincidir con Safari
o Zafari
, por ejemplo. Solo queremos desbaratar grep
y no encontrar caracteres alternativos para la posición 1.
ps -ef | grep "[S]afari " | awk '{print $2}'
Quita la segunda palabra separada del espacio en blanco para obtener el PID. Así es como se ve todo en una sesión para depurar los comandos que estamos usando:
mac:~ me$ ps -ef | grep Safari
501 300 1 0 Wed06PM ?? 45:03.88 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_40970
501 520 1 0 Wed06PM ?? 1:08.95 /usr/libexec/SafariCloudHistoryPushAgent
501 590 1 0 Wed06PM ?? 1:39.35 /System/Library/PrivateFrameworks/SafariSafeBrowsing.framework/com.apple.Safari.SafeBrowsing.Service
501 608 1 0 Wed06PM ?? 0:10.31 /System/Library/PrivateFrameworks/SafariShared.framework/Versions/A/XPCServices/com.apple.Safari.SearchHelper.xpc/Contents/MacOS/com.apple.Safari.SearchHelper
501 2476 1 0 Wed06PM ?? 0:01.56 /System/Library/PrivateFrameworks/SafariShared.framework/Versions/A/XPCServices/com.apple.Safari.ImageDecoder.xpc/Contents/MacOS/com.apple.Safari.ImageDecoder
501 38802 1 0 Thu01PM ?? 0:02.41 /usr/libexec/SafariNotificationAgent
501 92847 90892 0 7:27AM ttys013 0:00.00 grep Safari
mac:~ me$ ps -ef | grep "Safari "
501 300 1 0 Wed06PM ?? 45:04.31 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_40970
501 92875 90892 0 7:27AM ttys013 0:00.01 grep Safari
mac:~ me$ ps -ef | grep "[S]afari "
501 300 1 0 Wed06PM ?? 45:04.57 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_40970
mac:~ me$ ps -ef | grep "[S]afari " | awk '{ print $2 }'
300
mac:~ me$ echo kill 'ps -ef | grep "[S]afari " | awk '{ print $2 }''
kill 300
Note que utilicé echo
para pasar la sintaxis del comando; si no lo hiciera, entonces el comando kill habría ejecutado y eliminado el programa Safari que estoy usando para escribir esta respuesta.
¯\_(ツ)_/¯
Entonces, ahora debería sentirse cómodo escribiendo un guión de una línea para finalizar el proceso (con suerte) y llegamos a la parte de la mala idea de la respuesta. Sería mejor usar killall server.js
si nunca anticipa ejecutar otros servidores en los que no quiere que se eliminen.
- ¿Qué sucede si alguien crea otro programa o un script con el mismo nombre, ahora lo estás matando o matando quién sabe a qué se dirige el comando
awk
?
- Además, ni siquiera hemos llegado a cómo programar el script. Lo ejecutas cada 5 minutos, una vez por hora y, lo que es peor, cuánto daño hace a cualquier trabajo que supuestamente esté haciendo en la CPU en este momento.