Tất cả là vì một người tên là Albert D. Cahalan. Xe không biết BSD.
Lệnh ban đầu ps
cho Linux được viết và xuất bản lần đầu vào tháng 3 năm 1992 bởi Branko Lankester . Sau này được gọi là "kmem-ps" để phân biệt với "Proc-ps" được xuất bản vào tháng 12 năm 1992 bởi Michael K. Johnson . M. Lankester đã ps
sử dụng kmem
thiết bị để đọc bảng quy trình từ bộ nhớ kernel. M. Johnson đã ps
sử dụng proc
hệ thống tập tin để đọc bảng quy trình và có một số bản phát hành được thực hiện trong vài năm tới (ví dụ: tháng 1 năm 1993 , tháng 1 năm 1994 ).
Các ps
lệnh này cung cấp một cú pháp khá cũ, thậm chí sau đó, cho lệnh có kiểu ngày từ trước getopt()
những năm 1980. Đây là từ bản phát hành kmem-ps tháng 11 năm 1993 :
cách sử dụng: ps 0acefhHjlmnprsStuUvwxXy [t tty] [pid [, pid] ...]
j - định dạng điều khiển công việc, định dạng l - dài, định dạng m - bộ nhớ,
s - định dạng tín hiệu, định dạng u - người dùng, v - định dạng bộ nhớ ảo,
X - định dạng đăng ký, định dạng y - s tòa nhà, mặc định - định dạng ngắn
0 - bao gồm nhiệm vụ 0, a - bao gồm các quy trình cho tất cả người dùng
c - chỉ in tên lệnh, e - show env vars, f - in rừng của procs
h - triệt tiêu tiêu đề, n - in các trường người dùng và wchan bằng số
p - số lượng in trong các trang, r - hạn chế liệt kê các quy trình có thể chạy
S - tóm tắt việc sử dụng cho trẻ em trong các trường lỗi thời gian và trang CPU
t tty - hiển thị tất cả các khoản xử lý với TTY là thiết bị đầu cuối kiểm soát của họ
w - wide: 132, ww - 264, www - không giới hạn, mặc định - chiều rộng màn hình hoặc 80
x - bao gồm các quy trình mà không có thiết bị đầu cuối kiểm soát
U [HỆ THỐNG-HỆ THỐNG [SWAP-PATH]] - cập nhật cơ sở dữ liệu ps
Như bạn có thể thấy, có một tính cách, một ý nghĩa duy nhất cho các chữ cái và không có ký tự dấu trừ hàng đầu.
Ý tưởng về một U
lá cờ (không phải là -U
thông báo) xuất phát từ bản vá năm 1986 cho BSDps
bởi nó đã được đăng lên nhóm mod.sources
tin Usenet (như Tập 6 Số 83) của Michael A. Callahan.
Cùng đến với Albert D. Cahalan một vài năm sau đó, người đã viết lại Proc-ps. Xe đã đưa ra rất nhiều tuyên bố về nó. Thật không may, việc gỡ lỗi của rất nhiều trong số những tuyên bố đó đã bị lãng quên, và điều nổi bật trong tất cả những năm sau đó là ps
tuyên bố thủ công rằng điều này ps
cung cấp cú pháp tùy chọn Unix, BSD và GNU.
Nó không.
BSD ps
đã sử dụng getopt()
xử lý tùy chọn kể từ khi Marc Teitelbaum thay đổi nó thành như vậy vào tháng 4 năm 1990 , nhiều năm trước cả phiên bản Linux của M. Lankester ps
, chứ đừng nói đến A. Cahalan.
A. Cahalan đã ps
cung cấp cú pháp kmem-ps / Proc-ps cũ của Linux. Nó sau đó đã thêm một số cú pháp mà A. Cahalan tuyên bố là từ ps
lệnh AIX . A. Cahalan, người đã kiên quyết đưa ra quan điểm trên Usenet rằng "BSD hút và SysV không" rằng FreeBSD "hút" và xyr viết lại của Proc-ps là "tuân thủ tiêu chuẩn /bin/ps
" hỗ trợ "cú pháp BSD lỗi thời của bạn" , trớ trêu thay đã không nhận ra rằng điều này thực tế không phải là cú pháp BSD trong gần một thập kỷ vào thời điểm đó. ps
bản thân nó chỉ mới được chuẩn hóa vào năm đó, hơn nữa. Các phân tích trong lý do tiêu chuẩn của BSD so với các tùy chọn dòng lệnh Unix của AT & T chu đáo hơn rất nhiều so với bất kỳ A. Cahalan nào từng có.
Điều này ps
nổi tiếng đã giới thiệu I_WANT_A_BROKEN_PS
biến môi trường, điều gây nhầm lẫn A. Cahalan đổ lỗi cho M. Johnson trong khi đồng thời tuyên bố xyrelf chịu trách nhiệm phân tích tùy chọn. Trong thực tế, twain đã duy trì ps
song song hai triển khai .
Thật kỳ lạ, nếu một getopt()
tùy chọn kiểu được sử dụng đi trước các dấu trừ, như trường hợp của BSD ps
tại thời điểm đó và như là tiêu chuẩn mới (sau đó) cho ps
tài liệu, Cahalan / Johnson ps
sẽ nêu:
cảnh báo: `- 'không dùng nữa; sử dụng `ps e ', không phải` ps -e'
Trên thực tế, nó đã không được sử dụng -
mà đã bị phản đối. Thật vậy, tuyên bố của A. Cahalan là xyr ps
sẽ hoạt động theo cách tiêu chuẩn sử dụng -
- giống như BSD ps
đã từng có. Điều này gây ra nhiều câu hỏi từ những người dùng bối rối vào cuối những năm 1990 và đầu những năm 2000, và nói chung khiến người quản trị hệ thống và người dùng bối rối khi sách bắt đầu nói những điều như:
Bạn có thể tự hỏi tại sao chúng ta không sử dụng dấu gạch ngang trước cờ ps
. Bạn có thể sử dụng chúng, nhưng với ps
cách thức cũ và bạn sẽ nhận được cảnh báo về việc gắn bó với chương trình.
TiếtDeborah S. Ray và Eric J. Ray (1998). UNIX . Báo chí đào. ISBN YAM201353952. P. 174.
Bạn vẫn có thể thấy điều này được thảo luận trong các oldps
nhãn hiệu mà cuộc đàm phán bị "bắt nguồn từ phiên bản BSD của ps
" mặc dù nó thực sự là không, nó được khá rõ ràng là có nguồn gốc từ Linux một; và nói rằng "các đối số dòng lệnh không nên được đặt trước bởi một ký tự` - ', bởi vì trong tương lai, một `-' sẽ được sử dụng để chỉ ra các đối số dòng lệnh tiêu chuẩn Unix98, trong khi không có` - 'sẽ chỉ ra kiểu `` BSD '' hiện tại của các đối số dòng lệnh ".
Một số trong số này đã được giảm bớt trong Procps-ng, một bản viết lại thứ ba được thực hiện ngay sau khi bước sang thế kỷ (khi "-ng" trong tên dự án là chế độ à la), đó là khi Cahalan / Johnson ps
trở thành oldps
. Như bạn có thể thấy, ps
hướng dẫn không còn nói "mở rộng". Nhưng phiên bản mới của ps
( vẫn liên quan đến A. Cahalan ) đã đưa toàn bộ ý tưởng đa nhân cách trở nên cực đoan. Thật không may, hơn nữa, nó vẫn duy trì canard về các tùy chọn dòng lệnh BSD và cho đến ngày nay.
Trong khi đó, BSD độc thân vui vẻ ps
đã cung cấp getopt()
phân tích tùy chọn dòng lệnh trong 29 năm qua và 7 ngày tại thời điểm viết câu trả lời này; FreeBSD đã đạt được một procstat
lệnh; NetBSD và OpenBSD ps
đã theo dõi -A
tùy chọn thỏa hiệp mới ; và Thông số kỹ thuật Unix đơn đã dành riêng (nhưng không bao gồm) -O
tùy chọn BSD mới ps
.
đọc thêm
- Robert NM Watson (2017-01-14).
procstat
. Hướng dẫn sử dụng lệnh chung của FreeBSD .
ps
. Hướng dẫn sử dụng lệnh chung của FreeBSD . 2018/03/13.
ps
. Hướng dẫn sử dụng lệnh chung của NetBSD . 2016-12 / 02.
ps
. Hướng dẫn sử dụng lệnh chung của OpenBSD . 2016-10-26.