Làm thế nào tôi có thể có được một danh sách quá trình đầy đủ trong solaris, mà không cần cắt ngắn?


57

Có cách nào để tạo một danh sách quy trình đầy đủ trong solaris, mà không cần cắt ngắn không? Tôi đã thử pslệnh, với các đối số sau:

  -f Tạo một danh sách đầy đủ. (Xem bên dưới để biết
                      tầm quan trọng của các cột trong danh sách đầy đủ-
                      ing.)
  -l Tạo một danh sách dài. (Xem bên dưới.)

Vì vậy, cả hai dường như làm những gì tôi muốn, tuy nhiên, sâu hơn trong trang ps man, tôi thấy điều này:

 
 args Lệnh với tất cả các đối số của nó là một
                         chuỗi. Việc thực hiện có thể cắt ngắn
                         giá trị này cho chiều rộng trường; nó là
                         phụ thuộc vào việc thực hiện
                         tiếp tục cắt ngắn xảy ra. Nó là
                         không xác định liệu chuỗi
                         đại diện là một phiên bản của đối số
                         liệt kê khi nó được chuyển đến lệnh
                         khi nó bắt đầu, hoặc là một phiên bản của
                         đối số như chúng có thể đã được sửa đổi
                         theo ứng dụng. Ứng dụng không thể
                         phụ thuộc vào việc có thể sửa đổi
                         danh sách đối số và có sửa đổi đó-
                         Tion được phản ánh trong đầu ra của ps.
                         Việc triển khai Solaris giới hạn
                         chuỗi đến 80 byte; chuỗi là
                         phiên bản của danh sách đối số như nó là
                         truyền cho lệnh khi nó bắt đầu.

Về cơ bản nói rằng đầu ra sẽ bị cắt ngắn và tôi không thể làm gì về nó. Vì vậy, tôi đang đến đây. Chắc chắn những người khác đã gặp phải vấn đề này và thậm chí có thể có cách giải quyết. Tôi đoán ps không thể làm điều đó và vì vậy tôi cần sử dụng các công cụ khác để làm điều này. Điều đó có chính xác không?


Bạn đang nói về pslệnh? Nếu vậy thì xin vui lòng cập nhật câu hỏi để nó rõ ràng hơn.
phunehehe

Vâng, xin lỗi ... sự mày mò ban đầu của tôi là với lệnh ps, tôi đã làm cho câu hỏi rõ ràng hơn.
gabe.

Câu trả lời:


63

bạn có thể thử

pargs <PID>

cái này cung cấp cho bạn một danh sách tất cả các đối số

hoặc người khác sử dụng một ps khác. Nếu chạy dưới quyền root (hoặc bất kỳ người dùng nào có đủ đặc quyền cho vấn đề đó)

/usr/ucb/ps auxww

sẽ cung cấp cho bạn tất cả các đối số. Một phần của SUNWscpu, "Tương thích nguồn, (Usr)"


pargshiển thị bản sao trong quá trình của các đối số dòng lệnh (và tùy chọn môi trường). Tốt để biết, cảm ơn!
Gilles 'SO- ngừng trở nên xấu xa'

1
toàn bộ thư mục / usr / ucb này là mới đối với tôi ... Tôi thích nó!
gabe.

3
Trên Solaris 11, nếu bạn sử dụng các tùy chọn không có dấu gạch ngang (như "/ usr / bin / ps auxwww"), chúng sẽ được coi là tùy chọn kiểu UCB và đầu ra sẽ hiển thị thêm các dòng dài, ngay cả khi bạn KHÔNG chạy dưới quyền root. Điều này không được công bố tốt. Xem thêm: superuser.com/questions/148271/ps-command-in-solaris
Chris Quenelle

14

Hạt nhân không bắt buộc phải theo dõi các đối số dòng lệnh. Khi một chương trình được bắt đầu thông qua execvecuộc gọi, hạt nhân phải sao chép các đối số vào bộ nhớ tiến trình (để chúng sẽ có sẵn như argvtrong một chương trình C chẳng hạn). Sau đó, kernel có thể loại bỏ bộ nhớ được sử dụng để lưu trữ các đối số dòng lệnh ban đầu. Quá trình này được phép ghi đè lên bản sao của các đối số. Vì vậy, có thể chỉ đơn giản là không có dấu vết của các đối số.

Một số biến thể unix giữ một bản sao của các đối số ở một số hình thức. Solaris tiết lộ một số dữ liệu trong /proc/$pid. Kể từ OpenSolaris 2009,06, dấu vết duy nhất của các đối số là ở /proc/$pid/psinfođó, chúng được nối với các khoảng trắng ở giữa (vì vậy bạn không thể phân biệt giữa foo "one" "two"foo "one two") và chuỗi kết quả được cắt ngắn thành 80 byte. Trường này trong /proc/$pid/psinfolà những gì psin trong argscột.

Nhân tiện, các tùy chọn -f-lkiểm soát những trường nào được in, không phải là các trường có bị cắt bớt theo chiều rộng nào đó hay không.


Đây là một câu trả lời tốt, rất nhiều thông tin. Lệnh pargs đáp ứng nhu cầu của tôi tốt hơn, đó là lý do duy nhất tôi chọn câu trả lời này.
gabe.

6
Vì vậy, một lần nữa chúng tôi ngồi đây vào năm 2013 và chúng tôi vẫn cắt các chuỗi thành 80 byte vì chúng tôi chỉ có các thiết bị đầu cuối 80 char vào những năm 1970 và các chương trình "một số" vẫn chưa hiểu thực tế là cuộc sống đã tiếp tục. Và chúng tôi thích nó, chúng tôi ca ngợi đây là "khả năng tương thích"! Chúng ta nên xấu hổ về bản thân ...
Manjabes

1
@Quản lý haha! Những người chọn tiếp tục sử dụng Solaris không nên phàn nàn về việc hệ thống thực hiện mọi thứ theo cách cũ kỹ ;-) Solaris cố tình thay đổi chậm, để tương thích ngược hơn với các chương trình cũ hơn mong đợi hành vi nhất định. Nếu bạn muốn một hệ điều hành có danh sách ps dài hơn và các khả năng lạ mắt hơn trong các chương trình tiện ích, bạn có thể sử dụng Linux thay thế.
JohnGH

2

ps -eđưa ra danh sách tất cả các quy trình đang chạy. Ngoài ra còn có cái này ps -elf.


2
Ngay cả khi sử dụng đối số -l vẫn cắt bớt thông tin dòng lệnh
Lars Nordin

1
Không phải là một câu trả lời cho câu hỏi.
Konrad Gajewski

0

Tùy thuộc vào pslệnh bạn sử dụng, tôi sử dụng

ps -auxw

1
Phiên bản ps trên Solaris sử dụng các đối số phụ trợ không yêu cầu dẫn đầu '-' Nếu bạn không sử dụng Solaris thì câu trả lời của bạn không liên quan.
JohnGH

0

prstat sẽ cung cấp cho bạn các quy trình hiện đang chạy cùng với các pids của chúng và việc sử dụng CPU.

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.