Я збережу "чому це погана ідея після відповіді", але ось деякі трюки, які ви можете використовувати. Оскільки не всі зможуть протестувати з CC, давайте підберемо Safari для цього прикладу:
ps -ef | grep "Safari "
По-перше, після імені програми додаю пробіл, щоб переконатися, що він не є частиною шляху. Далі, використовуйте квадратні дужки навколо одного символу імені процесу, що утримує grep від самого себе. (можливо, це є більш елегантний спосіб, але цей хак для мене працює нормально)
ps -ef | grep "[S]afari "
Це призводить до того, що команда grep не відповідає Safari - дужки дозволять вам шукати [SZ]afari
і відповідати Safari
або Zafari
наприклад. Ми просто хочемо зіпсувати grep
та не знайдіть альтернативні символи для позиції 1.
ps -ef | grep "[S]afari " | awk '{print $2}'
Витягніть друге слово, відокремлене пробілом, щоб отримати PID. Ось як все виглядає в одному сеансі для налагодження команд, які ми використовуємо:
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
Зверніть увагу, що я використав echo
щоб просто передати синтаксис команди - якщо я не лунав, то команда kill фактично запустила б і вбив програму Safari, яку я використовую, щоб написати цю відповідь.
¯\_(ツ)_/¯
Отже, тепер ви повинні бути впевнені в написанні одного рядкового сценарію, щоб вбити один процес (сподіваюся), і ми прийшли до поганої ідеї частини відповіді. Краще використовувати killall server.js
якщо ви ніколи не очікуєте запуску інших серверів, які ви не хочете вбити.
- Що робити, якщо хтось зробить іншу програму або скрипт з тим же ім'ям, тепер ви теж вбиваєте або вбиваєте, хто знає що
awk
Команда вирішує прицілитися?
- Крім того, ми навіть не зрозуміли, як розписати сценарій. Ви запускаєте його кожні 5 хвилин, раз на годину, і гірше, скільки шкоди це робить для будь-якої роботи, яку він нібито робить на процесорі прямо зараз.