Salverò "perché questa è una cattiva idea per dopo la risposta", ma qui ci sono alcuni trucchi che potresti usare. Dal momento che non tutti possono provare con CC, prendiamo su Safari per questo esempio:
ps -ef | grep "Safari "
Per prima cosa, aggiungo uno spazio dopo il nome del programma per assicurarmi che non faccia parte del percorso. Successivamente, usa parentesi quadre attorno a un carattere del nome del processo, che impedisce a grep di trovarsi. (probabilmente c'è un modo più elegante per farlo, ma questo hack funziona per me)
ps -ef | grep "[S]afari "
Questo fa in modo che il comando grep non corrisponda a Safari: le parentesi ti consentono di cercare [SZ]afari
e corrispondono a Safari
o Zafari
per esempio. Vogliamo solo rovinare grep
e non trovare caratteri alternativi per la posizione 1.
ps -ef | grep "[S]afari " | awk '{print $2}'
Elimina la seconda parola separata dallo spazio bianco per ottenere il PID. Ecco come appare tutto in una sessione per eseguire il debug dei comandi che stiamo utilizzando:
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
Notate che ho usato echo
per passare semplicemente la sintassi del comando - se non l'ho fatto eco, allora il comando kill avrebbe effettivamente eseguito e ucciso il programma Safari che sto usando per scrivere questa risposta.
¯\_(ツ)_/¯
Quindi, ora dovresti sentirti a tuo agio scrivendo uno script a una riga per uccidere il processo (si spera) e arriviamo alla parte cattiva dell'idea della risposta. È preferibile utilizzare killall server.js
se non si prevede di eseguire altri server che non si desidera vengano eliminati.
- Che cosa succede se qualcuno crea un altro programma o una sceneggiatura con lo stesso nome, ora lo stai uccidendo o uccidendo chi sa cosa il comando
awk
decide di scegliere come target?
- Inoltre, non siamo nemmeno arrivati a come programmare lo script. Lo esegui ogni 5 minuti, una volta all'ora e, peggio, quanto danno fa a qualsiasi lavoro che si suppone stia facendo sulla CPU in questo momento.