Me guardaré el "por qué es una mala idea para después de la respuesta", pero aquí hay algunos trucos que puedes utilizar. Como no todo el mundo puede probar con CC, vamos a elegir Safari para este ejemplo:
ps -ef | grep "Safari "
Primero, añado un espacio después del nombre del programa para asegurarme de que no forma parte de la ruta. A continuación, utilice un corchete alrededor de un carácter del nombre del proceso, que evita que grep se encuentre a sí mismo. (probablemente hay una forma más elegante de hacerlo, 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. Sólo queremos estropear grep
y no encontrar caracteres alternativos para la posición 1.
ps -ef | grep "[S]afari " | awk '{print $2}'
Elimine la segunda palabra separada por espacios en blanco para obtener el PID. Así es como se ve todo esto 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
Fíjate que he utilizado echo
para pasar sólo la sintaxis del comando - si no lo hiciera, entonces el comando kill se habría ejecutado realmente y matado el programa Safari que estoy usando para escribir esta respuesta.
¯\_(ツ)_/¯
Así que, ahora deberías estar cómodo escribiendo una línea script para matar el único proceso (con suerte) y llegamos a la parte de mala idea de la respuesta. Sería mejor usar killall server.js
si no tienes previsto ejecutar otros servidores que no quieres que se maten.
- Qué pasa si alguien hace otro programa o un script con el mismo nombre, ahora estás matando eso también o matando quién sabe qué el
awk
¿el comando decide el objetivo?
- Además, ni siquiera hemos entrado en cómo programar el script. Lo ejecuta cada 5 minutos, una vez por hora, y peor aún, cuánto daño hace a cualquier trabajo que supuestamente está haciendo en la CPU en este momento.
0 votos
Los comentarios no son para ampliar la discusión; esta conversación ha sido trasladado al chat .
0 votos
Me gustaría animar a la colaboración en el espacio de respuesta, ya que el trabajo a través de la respuesta será útil. El chat también funciona :).