Đây là tính năng hạt nhân của Linux: có hai tên khác nhau cho quy trình.
- Một trong những tên là thành phần cuối cùng của đường dẫn đến tệp thực thi, ví dụ:
native_executable
nếu đơn đăng ký của bạn nằm ở số /data/apps/com.example.hello/native_executable
. Đây là tên xuất hiện trong trường Name
của /proc/PID/status
. Hạt nhân cắt ngắn nó thành 15 ký tự, vì vậy trong trường hợp này nó chứa native_executab
.
- Tên khác được chuyển bởi chương trình gọi ứng dụng là tham số dòng lệnh # 0 (
argv[0]
trong C, args[0]
bằng Java). Đây là tên xuất hiện ở đầu số /proc/PID/cmdline
và hiển thị ps
.
- Đường dẫn đến tệp thực thi cũng là mục tiêu của liên kết tượng trưng
/proc/PID/exe
.
Theo quy ước, khi chương trình bắt đầu chương trình khác, nó nên sử dụng tên của tệp thi hành làm tham số dòng lệnh 0, nhưng có thể chọn cách khác. Trường Name
của /proc/PID/status
luôn được đặt thành tên (cắt ngắn) của tệp thực thi bởi hạt nhân.
Đây là tính năng chung của Linux - xem thêm Can I use standard tools to get the full name of a process, when its name has embedded spaces? trên Ask Ubuntu.
Bản thân ứng dụng có thể thay đổi cả hai tên sau đó (mặc dù có những hạn chế về độ dài). Dalvik sử dụng khả năng này để phân biệt giữa các ứng dụng: tất cả các ứng dụng đều xuất phát từ cùng một tệp thực thi gốc /sytem/bin/app_process
; thay vì để tất cả chúng được gọi là app_process
, VM sẽ thay đổi cả hai tên thành tên gói ứng dụng. Tên trong /proc/PID/status
được giới hạn trong 15 ký tự, đó là lý do tại sao nó bị cắt ngắn. Bạn có thể lấy tên dài hơn từ /proc/PID/cmdline
(đọc đến byte null đầu tiên).
Hoàn hảo cảm ơn bạn! – predhme
Lý do để cắt bớt Tên thành 15 ký tự là gì? (TASK_COMM_LEN trên 'man proc'). Có vẻ như một giới hạn khá thấp. –
@PabloBianchi Nó được cắt ngắn để giữ cho cấu trúc dữ liệu không đổi kích thước, điều quan trọng trong hạt nhân. Tôi không biết tại sao kích thước nhỏ. – Gilles