Câu trả lời:
Nó phụ thuộc vào bạn bắt đầu nhiệm vụ. Nếu đó là một số công cụ dòng lệnh, bạn có thể chỉ cần chạy halt
hoặc shutdown -h now
:
wget http://..../somelargefile; halt
- halt
sẽ được thực hiện sauwget
wget http://..../somelargefile && halt
- halt
sẽ được thực thi nếu wget
trả về không có lỗi
wget http://..../somelargefile || halt
- halt
sẽ được thực thi nếu wget
trả về lỗi
Thay thế cho việc này đang sử dụng kshutdown
- trong ứng dụng này, bạn có thể chỉ định hành động nào nên được thực hiện (khởi động lại / tắt máy / hibernate / etc hoặc thực thi lệnh) và khi nào (sau một thời gian hoặc khi một ứng dụng khác thoát ra). Nếu bạn muốn sử dụng công cụ này, bạn cần chọn đúng quy trình - một số tiện ích cập nhật bắt đầu một vài quy trình con.
shutdown
không có cách nào để chờ đợi một sự kiện thực tế.
Mỗi tiến trình có một thư mục được đặt tên theo id tiến trình của nó (pid) trong proc
hệ thống tập tin. Do đó, bạn có thể đợi kết thúc một quy trình cụ thể bằng cách kiểm tra xem thư mục của nó có tồn tại nhiều lần hay không.
Bạn có thể sử dụng điều này để thực hiện tắt hệ thống sau khi chấm dứt quá trình như thế này (thay thế 2296 bằng pid để chờ):
su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'
Ưu điểm:
sudo
dấu nhắc mật khẩu muộn ).Nhược điểm:
ps
trong cùng một thiết bị đầu cuối đó sẽ giúp bạn phát hiện ra PID cho CMD. Nếu quá trình đã / đang ở một thiết bị đầu cuối khác, đầu ra ps cho mọi thứ thông qua grep để lọc cho lệnh của bạn sẽ giúp bạn tìm thấy nóps -elf | grep <command_related_word>
pgrep
aka grep ...
Bạn có thể sử dụng các toán tử &&
và ||
toán tử để xâu chuỗi các lệnh lại với nhau. Ví dụ:
apt-get update && sleep 2 && init 0
sẽ thực hiện cập nhật hệ thống bằng aptitude, đợi 2 giây và chuyển sang runlevel 0, tùy thuộc vào hệ thống của bạn, điều này có thể thực sự tắt hoặc không tắt nguồn phần cứng.
Để nói chuyện với một hoặc nhiều thao tác sau một thao tác tùy ý hơn, chẳng hạn như trình duyệt web, có lẽ là tải xuống, bạn sẽ cần thêm logic để xem tệp tải xuống để xác minh rằng thực tế quá trình tải xuống đã hoàn tất.
shutdown
một thời gian để chờ đợi; không cần sử dụng kshutdown cho mục đích đó.