Đặt một quy trình một tên cụ thể trong GNU / Linux?


10

Làm cách nào để khởi chạy một quy trình để nó có một mã định danh cụ thể trong pslệnh?

CẬP NHẬT : Tôi có một vài máy chủ đang chạy trên một hộp. Hầu hết trong số họ đang ở chế độ triển khai. Tuy nhiên, một trong những đang được phát triển. Tất cả các máy chủ đều là Pythonic và bệnh là tất cả các máy chủ được liệt kê như pythontrong ps, điều này khiến cho máy chủ killalltrong quá trình phát triển không thể còn nguyên vẹn.

CẬP NHẬT : Như David và GNUix đề xuất, tôi đã tạo liên kết tượng trưng cho trình thông dịch Python và các tập lệnh bash cho mỗi máy chủ.

Câu trả lời:


7

Tạo một liên kết tượng trưng nên thực hiện thủ thuật, tuy nhiên, sẽ hữu ích hơn nếu chúng ta biết bệnh và không phải là triệu chứng. Chính xác những gì bạn đang cố gắng để làm? Bởi vì có thể có một cách tốt hơn

gnuix@defiant)-(08:11pm-:-06/10)--
(~)./0012
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14020 pts/1    00:00:00 0012
14021 pts/1    00:00:00 ps
(gnuix@defiant)-(08:11pm-:-06/10)--
(~)ln -s 0012 weird
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)./weird 
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14046 pts/1    00:00:00 weird
14047 pts/1    00:00:00 ps
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)

Cập nhật: Dựa trên thông tin bổ sung mà bạn có thể (Tôi chắc chắn có một cách dễ dàng hơn nhưng hiện tại nó không đến với tôi) để máy chủ của bạn ghi ra PID của họ vào một tệp khi khởi động, sau đó bạn có thể giết -9 | cat /var/run/devserver.pid nhưng đó sẽ là một câu hỏi lập trình :)

Cập nhật lại: Bạn cũng có thể thực hiện một số thủ thuật shell để lấy PID của máy chủ khi bạn khởi chạy chúng, ngoài đỉnh đầu tôi có thể tạo một hàm shell gọi là startmyserver, ví dụ như sẽ bọc lệnh bạn sử dụng để khởi động máy chủ của mình nhưng cũng bắt $! đến một tệp dựa trên tên khởi động - sau đó chúng ta đang nói về kịch bản shell là 'inbound' @ ServerFault. :-)


4

Bạn có thể đổi tên nhị phân bạn sẽ chạy. Bạn có thể thoát khỏi chỉ bằng cách sử dụng một liên kết tượng trưng đến nhị phân.

Nếu bạn thực sự muốn thay đổi tên, cách tốt nhất là sử dụng một trình bao bọc đơn giản đặt argv và sau đó thực hiện quy trình bạn muốn chạy. Bây giờ không có thời gian để cung cấp cho bạn một số mã ví dụ, nhưng hãy hét thật to trong khoảng 10 giờ và tôi sẽ thấy những gì tôi có thể làm.


chính xác quan điểm của tôi. Bạn cần mã cho điều đó (ngoài việc đổi tên / (sym) liên kết nhị phân có thể có vấn đề nếu nó kiểm tra argv [0])
Martin M.

Một số nhị phân sẽ không hoạt động tốt nếu bạn chủ yếu nhúng (busybox, dropbear)
nhed 19/215

3

Hãy xem https://github.com/electrum/procname . Nó cho phép bạn đặt tên quy trình của bất kỳ quy trình nào bằng cách sử dụng biến môi trường.

Sử dụng:

Chạy Java với các biến môi trường LD_PRELOAD và PROCNAME được đặt:

LD_PRELOAD = / path / to / libprocname.so PROCNAME = xin chào java -jar foo.jar


2

Điều này không thực sự thuộc về SO vì nó chung chung, không phải là một câu hỏi cụ thể về ngôn ngữ.

Câu trả lời ngắn gọn không dễ dàng. Đó là, nó không thể được thực hiện từ bên trong chức năng của shell hoặc Procfs / sysfs của bạn. Bạn sẽ cần phải sử dụng một tiện ích bên ngoài để đạt được nó.

Có một mô tả dài về làm thế nào và tại sao ở đây . Coi chừng nó khá trung tâm.

Cập nhật:

Họ là con trăn làm thay đổi cuộc chơi. Bây giờ không quá SO, có lẽ sẽ dễ dàng sửa đổi chúng để sử dụng mô-đun này hoặc một cách tiếp cận tương tự.


touche .. Tôi biết có một cách dễ dàng hơn :)
GNUix

Mã C dài hơn đáng kể so với số lượng cần thiết do số lượng đầu ra của nó. Có thể thu nhỏ nó xuống, nhưng nó hoạt động khá giống như tôi đã gợi ý. Chỉ với một số mã đi kèm với nó :) Cái bit bị thiếu là người thực thi để chạy mã của bạn :)
David Pashley
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.