Thao tác tên trong danh sách quy trình là một thực tế phổ biến. Ví dụ: tôi có trong quá trình liệt kê các mục sau:
root 9847 0.0 0.0 42216 1560 ? Ss Aug13 8:27 /usr/sbin/dovecot -c /etc/dovecot/d
root 20186 0.0 0.0 78880 2672 ? S Aug13 2:44 \_ dovecot-auth
dovecot 13371 0.0 0.0 39440 2208 ? S Oct09 0:00 \_ pop3-login
dovecot 9698 0.0 0.0 39452 2640 ? S Nov07 0:00 \_ imap-login
ericb 9026 0.0 0.0 48196 7496 ? S Nov11 0:00 \_ imap [ericb 192.168.170.186]
Dovecot sử dụng cơ chế này để dễ dàng hiển thị những gì mỗi quá trình đang làm.
Về cơ bản, nó đơn giản như thao tác với argv[0]
tham số trong C. argv
là một mảng các con trỏ tới các tham số mà quá trình đã được bắt đầu. Vì vậy, một lệnh ls -l /some/directory
sẽ có:
argv[0] -> "ls"
argv[1] -> "-l"
argv[2] -> "/some/directory"
argv[3] -> null
Bằng cách phân bổ một số bộ nhớ, đặt một số văn bản vào bộ nhớ đó và sau đó đặt địa chỉ của bộ nhớ đó vào argv[0]
tên quy trình được hiển thị sẽ được sửa đổi thành văn bản mới.