Tôi muốn biết khi nào một quá trình chạy sẽ chấm dứt. Làm thế nào tôi có thể xem nó?


14

Tôi muốn biết bất kỳ lệnh nào tôi có thể chạy để biết thời gian kết thúc của một quá trình.

Tôi đã khởi chạy tiến trình và biết PID của nó nhưng tôi muốn biết liệu có lệnh nào có thể cho tôi biết khi nào nó kết thúc hay không.

Cảm ơn bạn đã giúp đỡ.


7
Câu hỏi thú vị. Dù sao, lần tới khi bạn chạy một lệnh mất nhiều thời gian, hãy cân nhắc sử dụng at(xem trang man man at:). Điều này sẽ xếp hàng nó như một công việc, bạn sẽ được thông báo khi hoàn thành, v.v. Nó rất cơ bản, giống như Cron, nhưng đối với các cảnh quay đơn lẻ.
gertvdijk

Câu trả lời:


11

Chạy cái này:

while kill -0 <PID>; do sleep 1; done; echo "Process finished at $(date +"%F %T")."

Hoặc bạn có thể tạo một kịch bản bash. wait-for-death.sh:

#!/bin/bash

if ! kill -0 $1; then
    echo "Process $1 doesn't exist."
    exit 1
fi

while kill -0 $1; do
    sleep 1
done

echo "Process $1 finished at $(date +"%F %T")."

Sau đó cấp cho nó quyền thực thi:

chmod +x wait-for-death.sh

và chạy nó qua quy trình 'PID:

./wait-for-death.sh <PID>

while kill -0 <pid>; do ...dễ mang theo hơn - nó cũng sẽ hoạt động trên các hệ thống không phải là Linux. Và không có lý do để sử dụng bash - mã của bạn không sử dụng bất kỳ bashism nào nên /bin/shhoàn toàn ổn ở đây.
Richard Hansen

1
@RichardHansen trang web này là về Ubuntu, đây không phải là StackOverflow.
hytromo

@RichardHansen Cảm ơn vì kill -0, tôi nghĩ đó là một giải pháp thanh lịch hơn.
Eric Carvalho

@hakermania: Tôi hiểu, đó là lý do tại sao tôi vẫn cho nó +1. Tôi chỉ chỉ ra một vài cách để làm cho kịch bản dễ mang theo hơn trong trường hợp ai đó muốn làm điều tương tự trên BSD / Solaris / vv. hệ thống. Tôi tin rằng đó là một ý tưởng tốt để gắn bó với POSIX trừ khi có lý do để làm một cái gì đó cụ thể cho Ubuntu. Trong trường hợp này, không có lý do gì để không viết tập lệnh tuân thủ POSIX.
Richard Hansen

2

Nếu bạn muốn tránh va chạm PID, bạn có thể sử dụng at:

job_id=$(at now <<< 'sleep 10' 2>&1 | awk 'END {print $2}')
while at -l | grep -q "^${job_id}\s"
do
    sleep 1
done
echo "Process finished at $(date)"

0

Có thể lệnh timephù hợp với nhu cầu của bạn:

time [options] command [arguments...]

Thí dụ:

time /local/usr/bin/myProcess arg1 arg2

Khi quá trình kết thúc timesẽ hiển thị một số thống kê như thời gian thực hiện để hoàn thành quá trình (tính bằng giây tôi nghĩ).

Kiểm tra trang người đàn ông hoặc chỉ cần xem trang người đàn ông trực tuyến này .


OP cho biết ông "đã đưa ra quy trình", vì vậy timeđây không phải là một lựa chọn.
Eric Carvalho
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.