2010-06-10 18 views
7

Tôi có một kịch bản sử dụng lệnh killproc và procofpid và thực hiện tốt trên một suse 64bit. Nhưng khi tôi thực thi kịch bản trên redhat 32 bit, tôi thấy rằng các lệnh trên không tồn tại.killproc và pidofproc trên linux

Tôi không có máy 32 bit Suse và 64bit redhat để kiểm tra tập lệnh của mình.

Tôi đoán đúng là trên 64bit redhat các lệnh trên sẽ có sẵn? Hoặc là các lệnh trên cụ thể cho Suse và redhat?

Cảm ơn

+1

Không, nhưng 'kill' và' pidof' cũng có thể di chuyển. –

Trả lời

4

Các lệnh này không thể di chuyển được. Trên thực tế đây là lần đầu tiên tôi nghe về họ - nhưng tôi đoán vấn đề của bạn là làm việc với quá trình bằng tên, không pid.

Kiểm tra man pgrep hoặc man pkill - chúng hơi di động hơn một chút. Chúng là một phần của gói procps (trong đó pstop đến từ) và sẽ khả dụng trên tất cả các biến thể của Linux. Chúng cũng có sẵn trên Solaris.

0

Tôi nghĩ rằng các lệnh đó là chi tiết cụ thể: Tôi chưa từng thấy chúng trước đây. killproc nên là một loại giết nhưng procofpid phải làm gì?

Trong tiêu đề bạn nói về pidofproc, bạn có thể tìm thấy lệnh này dưới pidof trên hầu hết các hộp linux.

-1

tôi đã có vấn đề tương tự như bạn, nó đã đưa ra cảnh báo:

pidof: tùy chọn không hợp lệ trên dòng lệnh!

Tôi đã thay đổi

"killproc -d 10 $cmd" 

để

"kill -9 \`pidof $cmd\`" 
8

killproc là trong Redhat Enterprise Linux 5.4 như một phần của /etc/init.d/functions

nếu bạn cần nó chỉ cần làm

. /etc/init.d/functions

trong kịch bản của bạn để tải các chức năng vỏ, có lẽ nó trong các phiên bản khác của redhat nhưng thats là người duy nhất tôi phải trao vào lúc này

2

Những người sử dụng trong Ubuntu được một phần của đặc điểm kỹ thuật "Linux Standard Base" và được ghi thành tài liệu there.

6

Các lệnh này là defined như một phần của Linux Standards Base (LSB), như được ghi chú bởi @AndreKR.

Tuy nhiên, trên một số hệ thống như Redhat (và có thể SUSE), tùy thuộc vào gói được cài đặt, các chức năng này có thể không được xác định tại vị trí được chỉ định bởi LSB, là /lib/lsb/init-functions. Thay vào đó chúng được xác định trong phạm vi /etc/init.d/functions. Ngoài ra, trong một số phiên bản, biến thể Redhat của /etc/init.d/functions thiếu chức năng được xác định bởi LSB start_daemon.Nếu bạn thêm đoạn mã sau vào đầu tập lệnh của mình, đoạn mã phải được di chuyển trên hầu hết các bản phân phối/lượt cài đặt:

if [[ -f /lib/lsb/init-functions ]]; then 
    . /lib/lsb/init-functions 
elif [[ -f /etc/init.d/functions ]]; then 
    . /etc/init.d/functions 
    # Pretend to be LSB-compliant 
    function start_daemon() { 
    daemon $* 
    } 
else 
    echo "Linux LSB init function script or Redhat /etc/init.d/functions is required for this script." 
    echo "See http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptfunc.html" 
    exit 1 
fi 
+0

Tuyên bố của bạn 'Redhat (và có thể SUSE) không xác định chúng ở vị trí được chỉ định bởi LSB' là sai. Gói meta 'lsb-core-noarch' cung cấp tệp'/lib/lsb/init-functions' trên các bản phân phối tương thích với LSB. Chỉ cần sử dụng trình quản lý gói phân phối để cài đặt. – Samveen

+0

@Samveen Cảm ơn bạn đã làm rõ và thông tin về gói 'lsb-core-noarch'. FWIW, trên Fedora 24, nó là 'redhat-lsb-core'. Đoạn mã kịch bản vẫn hữu ích nếu bạn không chắc liệu môi trường thời gian chạy có cài đặt gói hay không và bạn không có khả năng hoặc mong muốn ép buộc cài đặt của nó. – Raman

+0

Vui lòng kiểm tra 'cung cấp' cho gói' redhat-lsb-core': Bạn sẽ nhận thấy rằng 'cung cấp' một khả năng' lsb-core-noarch' là một 'gói meta', như tôi đã đề cập trong nhận xét của tôi ([thông tin rpmfind] (https://www.rpmfind.net/linux/RPM/fedora/updates/24/x86_64/r/redhat-lsb-core-4.1-33.fc24.x86_64.html)). – Samveen