ให้ชื่อเฉพาะในกระบวนการ GNU / Linux หรือไม่


10

ฉันจะเปิดใช้งานกระบวนการเพื่อให้มีตัวระบุเฉพาะในpsคำสั่งได้อย่างไร

UPD : ฉันมีเซิร์ฟเวอร์สองตัวที่ทำงานอยู่ในกล่องเดียว ส่วนใหญ่อยู่ในโหมดการปรับใช้ อย่างไรก็ตามหนึ่งในการพัฒนา เซิร์ฟเวอร์ทั้งหมดเป็น Pythonic และเป็นโรคที่เซิร์ฟเวอร์ทั้งหมดมีการระบุไว้pythonในpsซึ่งทำให้เป็นไปไม่ได้killallในการพัฒนาออกจากคนอื่นไม่เป็นอันตราย

UPD : ตามที่ David และ GNUix แนะนำให้ฉันสร้าง symlink ให้กับ Python interpreter และ bash script สำหรับแต่ละเซิร์ฟเวอร์

คำตอบ:


7

การสร้าง symlink ควรทำเคล็ดลับอย่างไรก็ตามมันจะมีประโยชน์มากขึ้นถ้าเรารู้ว่าเป็นโรคไม่ใช่อาการ คุณพยายามทำอะไร เพราะอาจจะมีวิธีที่ดีกว่า

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)--
(~)

อัปเดต: ขึ้นอยู่กับข้อมูลเพิ่มเติมที่คุณสามารถทำได้ (ฉันแน่ใจว่ามีวิธีที่ง่ายกว่า แต่มันไม่ได้มาหาฉันในขณะนี้) ให้เซิร์ฟเวอร์ของคุณเขียน PID ลงในไฟล์เมื่อเริ่มต้นแล้วคุณสามารถฆ่า -9 | cat /var/run/devserver.pid แต่นั่นจะเป็นคำถามการเขียนโปรแกรม :)

อัปเดตอีกครั้ง: คุณสามารถทำการเล็ดลอดเชลล์เพื่อรับ PID ของเซิร์ฟเวอร์เมื่อคุณเรียกใช้จากด้านบนของหัวฉันคุณสามารถสร้างฟังก์ชั่นเชลล์ที่เรียกว่า startmyserver เช่นที่จะตัดคำสั่งที่คุณใช้เพื่อเริ่มเซิร์ฟเวอร์ของคุณ ยังได้เงิน $! ไฟล์ตามชื่อเริ่มต้น - จากนั้นเรากำลังพูดถึงเชลล์สคริปต์ซึ่งเป็น 'inbounds' @ ServerFault :-)


4

คุณสามารถเปลี่ยนชื่อไบนารีที่คุณต้องการเรียกใช้ คุณอาจหนีไปได้โดยใช้ symlink กับไบนารี่

หากคุณต้องการเปลี่ยนชื่อจริง ๆ วิธีที่ดีที่สุดคือการใช้ wrapper ง่าย ๆ ที่กำหนด argv แล้วดำเนินการตามกระบวนการที่คุณต้องการเรียกใช้ ไม่มีเวลาที่จะให้โค้ดตัวอย่างแก่คุณในตอนนี้ แต่ตะโกนเสียงดังประมาณ 10 ชั่วโมงและฉันจะเห็นสิ่งที่ฉันสามารถทำได้


ตรงจุดของฉัน คุณจำเป็นต้องใช้รหัสที่ (นอกเหนือจากการเปลี่ยนชื่อ / (SYM) การเชื่อมโยงไบนารีซึ่งอาจจะมีปัญหาถ้ามันตรวจสอบ argv [0])
มาร์ตินเอ็ม

ไบนารีบางตัวอาจทำงานได้ไม่ดีหากคุณฝังตัวเป็นส่วนใหญ่ (busybox, dropbear)
พฤศจิกายน

3

ดูhttps://github.com/electrum/procname อนุญาตให้คุณตั้งชื่อกระบวนการของกระบวนการใด ๆ โดยใช้ตัวแปรสภาพแวดล้อม

การใช้งาน:

รัน Java ด้วยชุดตัวแปรสภาพแวดล้อม LD_PRELOAD และ PROCNAME:

LD_PRELOAD = / path / to / libprocname.so PROCNAME = สวัสดี java -jar foo.jar


2

สิ่งนี้ไม่ได้อยู่ใน SO จริงๆเพราะเป็นคำถามทั่วไปไม่ใช่คำถามเฉพาะทางภาษา

คำตอบสั้น ๆ ไม่ใช่เรื่องง่าย นั่นคือมันไม่สามารถทำได้จากการทำงานของเชลล์หรือ procfs / sysfs ของคุณ คุณจะต้องใช้โปรแกรมอรรถประโยชน์ภายนอกเพื่อให้บรรลุ

มีคำอธิบายยาวเป็นอย่างไรและทำไมที่นี่ ระวังให้ดี C-centric

ปรับปรุง:

พวกมันคืองูหลามซึ่งเปลี่ยนเกม หากไม่มีตอนนี้ดังนั้นมันอาจจะง่ายกว่าที่จะแก้ไขเพื่อใช้ประโยชน์จากโมดูลนี้หรือวิธีการที่คล้ายกัน


Touche .. ฉันรู้ว่ามีวิธีที่ง่าย :)
GNUix

รหัส C เป็น verbose มากเกินกว่าที่จะต้องเป็นเพราะปริมาณของการส่งออกมัน มันควรจะเป็นไปได้ที่จะหดมันลง แต่มันก็ทำแบบเดียวกับที่ฉันแนะนำ เท่านั้นที่มีโค้ดบางส่วนจะไปกับมัน :) บิตมันหายไปเป็น exec เพื่อเรียกใช้รหัสของคุณ :)
เดวิด Pashley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.