ฉันจะรับรายการกระบวนการทั้งหมดใน Solaris ได้อย่างไรโดยไม่ต้องตัดทอน


57

มีวิธีในการสร้างรายการกระบวนการทั้งหมดใน Solaris โดยไม่ต้องตัดบรรทัด? ฉันได้ลองpsคำสั่งโดยมีอาร์กิวเมนต์ดังนี้

  -f สร้างรายชื่อเต็ม (ดูด้านล่างสำหรับ
                      ความสำคัญของคอลัมน์ในรายการเต็ม -
                      Ing.)
  -l สร้างรายชื่อยาว (ดูด้านล่าง)

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

 
 args คำสั่งที่มีอาร์กิวเมนต์ทั้งหมดเป็น
                         เชือก การใช้งานอาจตัดทอน
                         ค่านี้เป็นความกว้างของฟิลด์ มันคือ
                         ขึ้นอยู่กับการใช้งานไม่ว่าจะมี
                         การตัดทอนเพิ่มเติมเกิดขึ้น มันคือ
                         ไม่ระบุว่าเป็นสตริง
                         แสดงเป็นรุ่นของการโต้แย้ง
                         รายการตามที่มันถูกส่งผ่านไปยังคำสั่ง
                         เมื่อมันเริ่มหรือเป็นรุ่นของ
                         ข้อโต้แย้งเนื่องจากอาจมีการแก้ไข
                         โดยแอปพลิเคชัน แอปพลิเคชันไม่สามารถ
                         ขึ้นอยู่กับความสามารถในการปรับเปลี่ยน
                         รายการข้อโต้แย้งและการดัดแปลง -
                         tion ถูกแสดงในเอาต์พุตของ ps
                         การใช้งาน Solaris จำกัด
                         สตริงถึง 80 ไบต์ สตริงคือ
                         รุ่นของรายการอาร์กิวเมนต์ตามเดิม
                         ส่งไปยังคำสั่งเมื่อมันเริ่ม

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


คุณกำลังพูดถึงpsคำสั่งหรือไม่ ถ้าเป็นเช่นนั้นโปรดอัปเดตคำถามเพื่อให้ชัดเจนยิ่งขึ้น
phunehehe

ใช่ขอโทษ ... การซ่อมครั้งแรกของฉันอยู่ที่คำสั่ง ps ฉันทำให้คำถามชัดเจนขึ้น
เกบ

คำตอบ:


63

คุณสามารถลอง

pargs <PID>

สิ่งนี้จะให้รายการของการขัดแย้งทั้งหมด

หรือใช้ ps อื่น ถ้าเรียกใช้เป็นรูท (หรือผู้ใช้ที่มีสิทธิ์เพียงพอสำหรับเรื่องนั้น)

/usr/ucb/ps auxww

จะให้ข้อโต้แย้งทั้งหมดแก่คุณ เป็นส่วนหนึ่งของ SUNWscpu "Source Compatibility, (Usr)"


pargsแสดงให้เห็นถึงการคัดลอกในกระบวนการของอาร์กิวเมนต์บรรทัดคำสั่ง (และสภาพแวดล้อมทางเลือก) เป็นการดีที่จะรู้ขอบคุณ!
Gilles 'หยุดชั่วร้าย'

1
ไดเรกทอรี / usr / ucb ทั้งหมดนี้เป็นของใหม่สำหรับฉัน ... ฉันชอบมัน!
เกบ

2
บน Solaris 11 หากคุณใช้ตัวเลือกที่ไม่มีเส้นประ (เช่น "/ usr / bin / ps auxwww") ตัวเลือกเหล่านี้จะถือเป็นตัวเลือกสไตล์ UCB และเอาต์พุตจะแสดงบรรทัดที่ยาวเป็นพิเศษแม้ว่าคุณจะไม่ได้ทำงานในฐานะรูทก็ตาม สิ่งนี้ไม่ได้รับการเผยแพร่อย่างดี ดูเพิ่มเติมที่: superuser.com/questions/148271/ps-command-in-solaris
Chris Quenelle

14

เคอร์เนลไม่จำเป็นต้องติดตามอาร์กิวเมนต์บรรทัดคำสั่ง เมื่อโปรแกรมเริ่มต้นผ่านการexecveเรียกใช้เคอร์เนลจะต้องคัดลอกอาร์กิวเมนต์ลงในหน่วยความจำกระบวนการ (เพื่อให้สามารถใช้ได้เช่นเดียวกับargvในโปรแกรม C เป็นต้น) หลังจากนั้นเคอร์เนลสามารถยกเลิกหน่วยความจำที่ใช้เพื่อเก็บอาร์กิวเมนต์บรรทัดคำสั่งเริ่มต้น กระบวนการได้รับอนุญาตให้เขียนทับสำเนาของอาร์กิวเมนต์ ดังนั้นอาจไม่มีร่องรอยของข้อโต้แย้ง

ตัวแปร Unix บางตัวเก็บสำเนาของอาร์กิวเมนต์ในบางรูปแบบ Solaris exposes /proc/$pidข้อมูลบางส่วนใน ในฐานะของ OpenSolaris 2009.06 มีเพียงร่องรอยของการขัดแย้ง/proc/$pid/psinfoเท่านั้นโดยมีการรวมเข้าด้วยช่องว่างระหว่าง (ดังนั้นคุณจึงไม่สามารถแยกแยะระหว่างfoo "one" "two"และfoo "one two") และสตริงผลลัพธ์จะถูกตัดเป็น 80 ไบต์ ฟิลด์นี้/proc/$pid/psinfoเป็นสิ่งที่psพิมพ์ในargsคอลัมน์

โดยวิธีการนั้น-fและ-lตัวเลือกจะควบคุมว่าจะพิมพ์ฟิลด์ใดไม่ว่าฟิลด์จะถูกตัดทอนให้มีความกว้างบ้างหรือไม่


นี่เป็นคำตอบที่ดีเช่นกันให้ข้อมูลมาก คำสั่ง pargs ตอบสนองความต้องการของฉันได้ดีกว่าซึ่งเป็นเหตุผลเดียวที่ฉันเลือกคำตอบนั้น
เกบ

6
ดังนั้นเรานั่งที่นี่อีกครั้งในปี 2556 และเราก็ตัดทอนสตริงเป็น 80 ไบต์เพราะเรามีเทอร์มินัล 80 ถ่านในปี 1970 และโปรแกรม "บางคน" ยังไม่เข้าใจความจริงที่ว่าชีวิตย้ายไป และเราชอบมันเรายกย่องสิ่งนี้ว่า "ความเข้ากันได้"! เราควรละอายใจกับตัวเราเอง ...
มานะเบเซส

1
@Manjabes ฮ่าฮ่า! คนที่เลือกใช้โซลาริสต่อไปไม่ควรบ่นเกี่ยวกับระบบที่ทำสิ่งต่าง ๆ ในแบบที่ล้าสมัย ;-) โซลาริสนั้นตั้งใจเปลี่ยนช้าเพื่อที่จะย้อนกลับเข้ากันได้กับโปรแกรมรุ่นเก่าที่คาดหวังพฤติกรรมบางอย่าง หากคุณต้องการระบบปฏิบัติการที่มีรายชื่อ ps ที่ยาวขึ้นและความสามารถที่แปลกใหม่ในโปรแกรมยูทิลิตี้คุณสามารถใช้ Linux แทน
JohnGH

2

ps -eให้รายการกระบวนการทั้งหมดทำงาน ps -elfนอกจากนี้ยังมีนี้


2
แม้แต่การใช้อาร์กิวเมนต์ -l ก็ยังตัดทอนข้อมูลบรรทัดคำสั่ง
Lars Nordin

1
ไม่ใช่คำตอบสำหรับคำถาม
Konrad Gajewski

0

ทั้งนี้ขึ้นอยู่กับที่psที่คุณใช้ผมใช้

ps -auxw

1
รุ่นของ ps บน Solaris ที่ใช้อาร์กิวเมนต์ auxw ไม่ต้องการส่วนนำ '-' ถ้าคุณไม่ได้อยู่บน Solaris คำตอบของคุณไม่เกี่ยวข้อง
JohnGH

0

prstat จะให้กระบวนการที่ทำงานอยู่ในปัจจุบันพร้อมกับ pids และการใช้ประโยชน์ CPU

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