เหตุใดจึงต้องเพิ่มวงเล็บล้อมรอบชื่อกระบวนการ


19

บนเครื่องของฉัน ( การทดสอบแบบเดเบียน ) เมื่อฉันทำ

ps aux | grep pam

ฉันได้รับ

orto        609  0.0  0.0  58532  2148 ?        S    08:06   0:00 (sd-pam)  
orto       5533  0.0  0.0  12724  1948 pts/1    S+   16:51   0:00 grep pam

(sd-pam)ดูเหมือนชื่อแปลก ๆ สำหรับกระบวนการ อ่านฟอรั่มนี้ฉันเห็นว่าชื่อนี้ตั้งอยู่บนวัตถุประสงค์โดย systemd ในซอร์สโค้ดที่เราเห็น

/* The child's job is to reset the PAM session on
 * termination */

/* This string must fit in 10 chars (i.e. the length
 * of "/sbin/init"), to look pretty in /bin/ps */
rename_process("(sd-pam)");

มันหมายถึงอะไรดูสวย/bin/psและทำไมต้องเลือก(sd-pam)และไม่เพียง แต่sd-pamเป็นชื่อ? [kintegrityd]ใส่วงเล็บรอบชื่อดูเหมือนว่าแสดงให้เห็นว่ากระบวนการนี้มีสิ่งที่พิเศษเช่นสำหรับเช่นด้ายเคอร์เนล


คุณหมายถึงอะไรกับ "วัตถุประสงค์ของการทำสิ่งนี้" คืออะไร? เป็นชื่อมันอาจคล้ายกับสิ่งที่มันทำ (SessionDestroy-PAM?)
kos

ฉันได้แก้ไขคำถามโดยคำนึงถึงคำพูดของคุณแล้ว
Ortomala Lokni

อาขอโทษฉันไม่เข้าใจว่าคุณกำลังพูดถึงวงเล็บ สุจริตฉันไม่รู้: ตามนี้ psล้อมรอบชื่อบัญชีของกระบวนการลงในวงเล็บและพิมพ์ว่าถ้ากระบวนการที่จะแสดงมีการเปลี่ยนชื่อหากpsไม่สามารถหากระบวนการด้วยชื่อเดิมอีกต่อไป แต่แน่นอน ไม่ได้อธิบายว่าทำไมนี้จะทำในpamรหัสที่มา 's psซึ่งมีอะไรจะทำอย่างไรกับ
kos

1
บางทีฉันอาจจะอ่านความคิดเห็นโดย @kos ย่อยอย่างมีสติ แต่ฉันเพิ่งจะบอกว่ามันอาจจะหลีกเลี่ยงคนที่มองหาไบนารีที่เรียกว่า sd-pam หลังจากอ่านว่า ps ใช้ไวยากรณ์เดียวกันที่แน่นอนอยู่แล้วนั่นอาจจะเป็นการพิจารณาอย่างรอบคอบ แน่นอนว่าจะมีรายการเครื่องมือกระบวนการอื่น ๆ ที่ไม่ได้เพิ่มวงเล็บ ( systemd-cgls?)
sourcejedi

2
@kos: "sd" มีความเป็นไปได้สูงที่ systemd ไม่ใช่สำหรับ "session destroy"
intelfx

คำตอบ:


15

การใส่เครื่องหมายวงเล็บไว้รอบ ๆ ชื่อนั้นบ่งบอกว่ากระบวนการนี้มีบางอย่างที่พิเศษ

มีสองกรณี:

  • (...)

เมื่อ PID 1 เริ่มบริการไบนารีมันจะแยกกระบวนการก่อนออกจากนั้นปรับพารามิเตอร์ของกระบวนการตามการกำหนดค่าบริการและในที่สุดก็เรียกใช้ execve () เพื่อดำเนินการกระบวนการบริการจริง ในช่วงเวลาระหว่างทางแยกและผู้บริหารเราใช้ PR_SET_NAME เพื่อเปลี่ยนชื่อกระบวนการเป็นสิ่งที่กำลังจะเริ่มต้นเพื่อให้ง่ายต่อการแมปสิ่งนี้กับบริการที่เริ่มต้นในที่สุด อย่างไรก็ตามโปรดทราบว่ามีการ จำกัด ขนาดอย่างเข้มงวดสำหรับชื่อ "comm" (เช่นชื่อกระบวนการที่ฉันกำหนดด้วย PR_SET_NAME เช่นรายการ "top" รายการ) ซึ่งหมายความว่าเราต้องตัดทอน เราตัดการเริ่มต้นของสตริงเนื่องจากโดยปกติแล้วคำต่อท้ายจะน่าสนใจมากขึ้น (ไม่เช่นนั้นบริการต่าง ๆ ของ systemd ทั้งหมดจะปรากฏเป็น "(systemd-)" - ซึ่งไม่มีประโยชน์เป็นพิเศษ)

ดู https://lists.freedesktop.org/archives/systemd-devel/2016-April/036322.html

  • (sd-pam) เป็นกรณีพิเศษ

ถ้าเราวางไข่หน่วยที่มีที่ไม่ว่างเปล่า 'PAMName =' เราแยกออกจากเด็กกระบวนการภายในหน่วยที่เรียกว่า '(SD-pam)' ซึ่งนาฬิกาเซสชั่น มันกำลังรอให้กระบวนการหลักจบการทำงานจากนั้นจึงดำเนินการผ่าน pam_close_session (3)


5

มันหมายถึงอะไรดูสวยใน / bin / ps และทำไมต้องเลือก (sd-pam) และไม่ใช่แค่ sd-pam เป็นชื่อ? การใส่เครื่องหมายวงเล็บไว้รอบ ๆ ชื่อนั้นบ่งบอกว่ากระบวนการนี้มีบางอย่างที่พิเศษ

ใช่มันมีบางสิ่งที่พิเศษ นี่เป็นชื่อที่สร้างขึ้นและไม่ใช่ชื่อของไบนารีใด ๆ ที่มีอยู่ กล่าวอีกนัยหนึ่งไม่มีไฟล์ "sd-pam" ใด ๆ กระบวนการนี้เป็นทางแยกของ PID 1

วงเล็บอาจหมายถึงการระบุนี้


คุณรู้หรือไม่ว่ามีกระบวนการอื่น ๆ ที่ใช้การประชุมเดียวกันและถ้านี่คือการประชุมมาตรฐาน?
Ortomala Lokni

@OttomalaLokni: ฉันไม่ได้ตระหนักถึงอนุสัญญาใด ๆ สำหรับการตั้งชื่อกระบวนการดังกล่าว อย่างไรก็ตามนี่ไม่ได้หมายความว่าไม่มีการประชุม
intelfx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.