ps chỉ in tối đa 4096 ký tự của bất kỳ dòng lệnh nào của tiến trình


19

Khi tôi grep cho một quy trình java, tôi nhận được dưới đầu ra nhưng nó bị giới hạn ở 4096 ký tự dẫn đến tên quy trình thực tế (đó là kafka.Kafka) không được hiển thị trong grepđầu ra.

Đây có phải là một hạn chế của grep? Có cách nào để in các ký tự vượt quá giới hạn 4096 không?

ps -ef | grep java

java -Xmx6G -Xms6G -server -XX: + UseG1GC -XX: MaxGCPauseMillis = 20 -XX: InitiatingHeapOccupancyPercent = 35 -XX: + DisableExplicitGC -Djava.aw -logs / kafkaServer-gc.log -verbose: gc -XX: + PrintGCDetails -XX: + PrintGCDateStamp -XX: + PrintGCTimeStamp -Dcom.sun.man Quản lý.jmxremote -Dcom.sun.man sun.man Quản lý.jmxremote.ssl = false -Dkafka.logs.dir = / x / kafka / data01 / kafka-app-log -Dlog4j.configuration = file: ./../ config / log4j.propericat -cp: / /home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/aopalliance-repackaged-2.4.0-b34.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10 -0.10.1.1 / bin /../ libs / argparse4j-0.5.0.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / connect-api- 0.10.1.1.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/ ../libs/connect-file-0.10.1.1.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/connect-json-0.10.1.1.jar:/ x / home / bmcuser / kafka-paypal / kafka_2.10-0.10.1.1 / bin /../ libs / connect-runtime-0.10.1.1.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10- 0.10.1.1/bin/../libs/guava-18.0.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/hk2-api-2.4.0 -b34.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / hk2-locator-2.4.0-b34.jar: / x / home / bmcuser / kafka-paypal / kafka_2.10-0.10.1.1 / bin /../ libs / hk2-utils-2.4.0-b34.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/ bin /../ libs / jackson-annotations-2.6.0.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jackson-core-2.6.3 .jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jackson-databind-2.6.3.jar: / x / home / bmcuser / kafka-paypal / kafka_2.10-0.10.1.1 / thùng / ../libs/jackson-jaxrs-base-2.6.3.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jackson-jaxrs-json-provider-2.6 .3.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jackson-module-jaxb-annotations-2.6.3.jar: / x / home / bmcuser / kafka-paypal / kafka_2.10-0.10.1.1 / bin /../ libs / javassist-3.18.2-GA.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/ bin /../ libs / javax.annotation-api-1.2.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / javax.inject-1.jar : /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / javax.inject-2.4.0-b34.jar: / x / home / bmcuser / kafka-paypal / kafka_2.10-0.10.1.1 / bin /../ libs / javax.servlet-api-3.1.0.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/ .. /libs/javax.ws.rs-api-2.0.1.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jersey-client-2.22.2 .jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jersey-common-2.22.2.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10 -0.10.1.1 / bin /../ libs / jersey-container-servlet-2.22.2.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jersey-container-servlet-core-2.22.2.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jersey-guava-2.22.2.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jersey-media-jaxb-2.22.2.jar:/x/home/bmcuser/kafka-paypal/kafka_2 .10-0.10.1.1 / bin /../ libs / jersey-server-2.22.2.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / cầu tàu-tiếp tục-9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jetty-http-9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jetty-io-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jetty-securance-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2 .10-0.10.1.1 / bin /../ libs / jetty-server-9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jetty-servlet-9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jetty-servlets-9.2.15.v20160210. jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jetty-produc-9.2.15.v20160210.jar: / x / home / bmcuser / kafka-paypal /kafka_2.10-0.10.1.1/bin/../libs/jopt-simple-4.9.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/ kafka_2.10-0.10.1.1.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / kafka_2.10-0.10.1.1-so/libs/jetty-server-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jetty-servlet-9.2.15.v20160210 .jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jetty-servlets-9.2.15.v20160210.jar: / x / home / bmcuser / kafka- paypal / kafka_2.10-0.10.1.1 / bin /../ libs / jetty-produc-9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/ ../libs/jopt-simple-4.9.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/kafka_2.10-0.10.1.1.jar:/ x / home / bmcuser / kafka-paypal / kafka_2.10-0.10.1.1 / bin /../ libs / kafka_2.10-0.10.1.1-so/libs/jetty-server-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jetty-servlet-9.2.15.v20160210 .jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin /../ libs / jetty-servlets-9.2.15.v20160210.jar: / x / home / bmcuser / kafka- paypal / kafka_2.10-0.10.1.1 / bin /../ libs / jetty-produc-9.2.15.v20160210.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/ ../libs/jopt-simple-4.9.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/kafka_2.10-0.10.1.1.jar:/ x / home / bmcuser / kafka-paypal / kafka_2.10-0.10.1.1 / bin /../ libs / kafka_2.10-0.10.1.1-so/libs/jetty-util-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jopt-simple-4.9.jar:/ x / home / bmcuser / kafka-paypal / kafka_2.10-0.10.1.1 / bin /../ libs / kafka_2.10-0.10.1.1.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10- 0.10.1.1/bin/../libs/kafka_2.10-0.10.1.1-/libs/jetty-util-9.2.15.v20160210.jar:/x/home/bmcuser/kafka-paypal/kafka_2.10-0.10.1.1/bin/../libs/jopt-simple-4.9.jar:/ x / home / bmcuser / kafka-paypal / kafka_2.10-0.10.1.1 / bin /../ libs / kafka_2.10-0.10.1.1.jar: /x/home/bmcuser/kafka-paypal/kafka_2.10- 0.10.1.1/bin/../libs/kafka_2.10-0.10.1.1-


bạn có thể tham khảo bài viết này unix.stackexchange.com/questions/101681/ Ấn
Kamaraj

Điều đó đã không giải quyết được vấn đề. Tôi đoán giới hạn ở đây là 4096 byte.
zer0Id0l

3
Có vẻ như bạn có thể làm cho đường dẫn lớp của mình ngắn hơn rất nhiều bằng cách sử dụng cú pháp ký tự đại diện, xem stackoverflow.com/questions/219585/ , hoặc bạn chắc chắn có thể di chuyển nó (hoàn toàn) khỏi dòng lệnh bằng env var CLASSPATH; một trong số đó có cơ hội tốt để làm cho dòng lệnh đủ ngắn để xem tên lớp của bạn. Hoặc cho Java xử lý chỉ , nếu UID của bạn có quyền truy cập và bạn có hoặc có được JDK, jpschương trình classname bất kể cắt ngắn commandline (ít nhất là trên Linux).
dave_thndry_085

1
@slebetman Tôi chắc chắn OP biết nhưng kịch bản có thể tạo ra điều này không phải là
con mèo

1
Tiêu đề ngụ ý rằng ps -efin nhiều hơn, nhưng grep là những gì thay đổi nó. Điều đó dường như ... vô căn cứ.
Charles Duffy

Câu trả lời:


35

Đây không phải là một giới hạn grep, nhưng về /proc/PID/cmdlinemặt (về mặt kỹ thuật, quyết định thiết kế, không phải là giới hạn). /proc/PID/cmdlinechứa dòng lệnh hoàn chỉnh của quy trình, với lệnh chính và các đối số được phân tách bằng ASCII NUL và tệp cũng kết thúc bằng NUL. Vì vậy, grepsẽ in toàn bộ nội dung tập tin nếu có một trận đấu. ( ps -eflấy nội dung của tập tin này là CMD).

Độ dài tối đa được mã hóa cứng trong kernel (Linux) tớiPAGE_SIZE :

static int proc_pid_cmdline(struct task_struct *task, char * buffer)
{
        int res = 0;
        unsigned int len;
        struct mm_struct *mm = get_task_mm(task);
        if (!mm)
                goto out;
        if (!mm->arg_end)
                goto out_mm;    /* Shh! No looking before we're done */

        len = mm->arg_end - mm->arg_start;

        if (len > PAGE_SIZE)
                len = PAGE_SIZE;

do đó 4096 byte cho một hệ thống như vậy:

% getconf PAGE_SIZE
4096

Ngoài ra, nếu bạn có (các) ký tự đa nhân, số lượng ký tự sẽ ít hơn 4096, như bạn có thể tưởng tượng.


7
@ zer0Id0l Bạn không thể thay đổi PAGE_SIZE: đó là một tài sản của phần cứng. Bạn sẽ phải thiết kế một số phần cứng mới với kích thước trang lớn hơn hoặc (dễ dàng hơn rất nhiều) loại bỏ giới hạn rằng nội dung cmdlinebị cắt ngắn thành một trang bằng cách thực hiện ánh xạ hoặc sao chép bộ nhớ phù hợp.
Gilles 'SO- ngừng trở nên xấu xa'

4
FWIW, khi Giles nói rằng đó là một tài sản của phần cứng, anh ta có nghĩa đó là tài sản của MMU CPU của bạn. Vì vậy, bạn cần sử dụng CPU có MMU có kích thước trang lớn hơn 4k hoặc thiết kế kiến ​​trúc (và xây dựng bo mạch chủ + BIOS cho nó) sử dụng MMU bên ngoài với kích thước trang lớn hơn 4k (hãy nhớ, trong MMU trước đây từng là chip ngoài) hoặc thiết kế CPU của riêng bạn (cộng với trình biên dịch, v.v.). Tùy chọn khác là sửa đổi kernel linux để proc_pid_cmdlinekhông sử dụng PAGE_SIZE
slebetman

Giới hạn thiết kế này không cần tồn tại. Vui lòng viết một Proc_pid_cmdline khác không có nó.
Joshua
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.