Kịch bản của tôi chấp nhận một tên quy trình làm đầu vào và giết chết nó. Tôi đã thử sử dụng pgrep nhưng nó trả về hai PID, một cho quy trình đang chạy và một cho tập lệnh chấp nhận tên quy trình làm đầu vào, vì vậy bị kẹt! Tôi cũng đã thử sử dụng pgrep -fotùy chọn này nhưng điều đó cũng không giúp được gì. Bất kỳ đề nghị sẽ là hữu ích. Đây là kịch bản của tôi
#!/bin/bash
ProcessName=$1
pID= pgrep -fl $ProcessName
echo $pID
Vì vậy, khi tôi gọi tập lệnh, nó sẽ trả về hai PID:
bash-3.00$ ./dynamic_values.sh test-Process
10534 /xxx/xxo/xxx/xxe --run --propFile /application/test/test-Process_Archive.tra --innerProcess
23401 /bin/bash ./dynamic_values.sh test-Process
Tôi đã mong đợi chỉ 10534, nhưng nó cũng chọn kịch bản. Phiên bản HĐH chỉ trong trường hợp:
bash-3.00$ uname -a
Linux xxxxxx 2.6.9-67.0.1.
pkillkhi sử dụng -f(mà anh ấy đang làm) sẽ có cùng một vấn đề.
-xkết hợp với -fđể đảm bảo bạn phù hợp với toàn bộ? Tôi ngạc nhiên pkillkhông có cách xây dựng để xử lý việc này.
pkilltự sát trước khi giết các quá trình tôi muốn giết, vì vậy tôi luôn cho rằng việc thực hiện là tốt.
pkill. Nó sử dụng logicpgreptìm kiếm quá trình tương tự như vậy vì vậy bạn đã biết cách sử dụng nó để tìm quy trình của mình, nhưng thay vì trả lại cho bạn, nó chỉ đi trước và gửi cho họ tín hiệu tiêu diệt cho bạn. Đồng thời, nó cũng quan tâm đến các chi tiết như không tự sát.