Một cách thường xuyên, tôi quên không thêm && shutdown -h now
vào một quy trình dài. Có cách nào để thêm một shutdown -h now
lệnh sau khi lệnh đầu tiên được gọi không? Nó không có ý định làm gián đoạn quá trình đang diễn ra. Có lẽ có thể xem PID?
Một cách thường xuyên, tôi quên không thêm && shutdown -h now
vào một quy trình dài. Có cách nào để thêm một shutdown -h now
lệnh sau khi lệnh đầu tiên được gọi không? Nó không có ý định làm gián đoạn quá trình đang diễn ra. Có lẽ có thể xem PID?
Câu trả lời:
Không cần phải chạy liên tục ps để liệt kê tất cả các quy trình và grep thông qua đầu ra. Bối cảnh quá trình với ctrl-Z, sau đó chạy
bg %1 ; wait %1 ; shutdown -h now
Nếu bạn có các công việc nền khác đang chạy, thì bạn sẽ được cung cấp một công việc khác thay vì [1] khi bạn ctrl-z. Nếu vậy, sử dụng thay thế.
Bạn có thể làm một cái gì đó như thế này, điều này sẽ kiểm tra xem quá trình có chạy 5 giây một lần hay không và thực hiện hành động thích hợp:
while true; do
if ps -ef | grep -q '[l]ong-running-process'; then
sleep 5
else
sudo poweroff
fi
done
Lưu ý dấu ngoặc vuông trong grep
biểu thức. Điều này là để đảm bảo rằng grep
quy trình không được khớp nếu nó kết thúc trong ps
danh sách. Bao quanh bất kỳ ký tự đơn với dấu ngoặc vuông là đủ.
Tôi làm điều này tất cả các thời gian.
&&
lệnh của tôi .fg && shutdown -h now
đến:
Ngoài ra, bạn có thể thăm dò ý kiến trong các câu trả lời khác như thế này:
while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
Nếu bạn biết pid bạn có thể chạy này:
while ps -p $PID; sleep 5; done; shutdown -h now
Để chạy mà không có tiếng vang từ ps, hãy làm điều này:
while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now
Và cuối cùng để chạy nó trong nền mà không có bất kỳ đầu ra nào:
(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &
Giải pháp của Scott là một giải pháp tốt nhưng điều này sẽ loại bỏ sự cần thiết grep
lặp đi lặp lại nếu bạn đã biết về vấn đề này. Và nó nhanh hơn rất nhiều để nhập vào .: P
Tạo một kịch bản shell để chạy cả hai quá trình:
MyShellScript.txt:
#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now
Sau khi lưu cái này trong thư mục nơi bạn bắt đầu quá trình đã cho, hãy thực hiện:
chmod +x MyShellScript.txt
Sau đó, khi bạn muốn chạy lệnh, chỉ cần gõ ./MyShellScript.txt
và nó sẽ làm cả hai cho bạn.
&&
sẽ chỉ chạy nếu lệnh trước đó thành công. Nếu bạn muốn nó chạy ngay cả khi lệnh không sử dụng;
thay thế.