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 myServerhay 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.
|| truerồ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 1Mã lỗi được trả về từ killalllệnh, nếu quá trình không tồn tại. Phần echosẽ chỉ đi vào hành động, nếu killalltrở lại 1, trong khi chính nó sẽ trở lại 0(thành công).
killall -qlà tốt hơn
killall -qkhô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 pkillvới tùy chọn-f
pkill -f myServer
Tùy chọn -flà mẫu thường được so khớp với tên quy trình.
killchỉ 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ụngpkillhoặckillalllà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).