Hiện tại tôi sử dụng dòng như thế này trong tệp tập lệnh sh của mình:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Nhưng tôi tự hỏi làm thế nào để gọi nó chỉ khi quá trình ( myServer
ở đây) đang chạy?
Hiện tại tôi sử dụng dòng như thế này trong tệp tập lệnh sh của mình:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Nhưng tôi tự hỏi làm thế nào để gọi nó chỉ khi quá trình ( myServer
ở đây) đang chạy?
Câu trả lời:
Tôi thường chỉ sử dụng pgrep và pkill
if pgrep myServer; then pkill myServer; fi
pkill myServer
hay killall -q myServer
? Không có nhược điểm nào trong việc cố gắng tiêu diệt các quá trình không tồn tại.
|| true
rồi.
if ! killall -q myServer; then echo ERROR; fi
?
Một chút của một cách tiếp cận khác sẽ là một cái gì đó như thế này:
killall PROCESS || echo "Process was not running."
Điều này sẽ tránh 1
Mã lỗi được trả về từ killall
lệnh, nếu quá trình không tồn tại. Phần echo
sẽ chỉ đi vào hành động, nếu killall
trở lại 1
, trong khi chính nó sẽ trở lại 0
(thành công).
killall -q
là tốt hơn
killall -q
không được hỗ trợ trên tất cả các hương vị unix, macOS Catalina vẫn không có.
thử sử dụng:
sudo kill `pidof process_name`
trong đó process_name là tên của tiến trình bạn muốn giết. Điều tuyệt vời ở đây là pidof sẽ liệt kê các pid của tất cả các quy trình khớp với tên đã cho. Vì kill chấp nhận nhiều pid's, nó sẽ giết tất cả chúng trong một ý thích duy nhất.
Hãy cho tôi biết nếu điều này sẽ giúp.
kill `pidof process_name
. Nếu nó trả về một danh sách trống, bỏ qua lệnh gọi.
Script nhỏ tôi đã tạo bằng R & D. tôi hi vọng bạn sẽ thích nó
#!/bin/bash
echo " Enter the process name:"
read $proc_name
if pgrep $proc_name
then
echo " $proc_name running "
pkill $proc_name
echo "$proc_name got killed"
else
echo " $proc_name is not running/stopped "
fi
lưu nó với một số tên như script.sh sau đó
chmod +x script.sh
./script.sh
Sau đó cung cấp tên quá trình của bạn.
Lưu ý: Tôi đã thử nhiều lần với nó và nó ổn.
Kiểm tra nếu quá trình tồn tại với pidof
. Nếu có, giết nó:
(! pidof process_name) || sudo kill -9 $(pidof process_name)
Mã thoát luôn là 0 sau khi thực hiện lệnh trên.
Sử dụng pkill
với tùy chọn-f
pkill -f myServer
Tùy chọn -f
là mẫu thường được so khớp với tên quy trình.
kill
chỉ khi quá trình đang chạy, bởi vì có một điều kiện chạy đua giữa thử nghiệm và yêu cầukill
(có thể quá trình dừng lại vì một lý do khác trong thời gian ngắn đó). Bạn nên sử dụngpkill
hoặckillall
làm chính xác như những gì bạn cố gắng làm, nhưng với ít loại hơn (và có lẽ một số lợi thế khác nữa).