คำถามติดแท็ก proc

procfs (หรือระบบไฟล์ proc) เป็นระบบไฟล์พิเศษในระบบปฏิบัติการ UNIX ที่นำเสนอข้อมูลเกี่ยวกับกระบวนการและข้อมูลระบบอื่น ๆ ในโครงสร้างคล้ายไฟล์ลำดับชั้น

2
/ proc / <pid> / exe symlink แตกต่างจาก symlink ทั่วไปอย่างไร
หากฉันเริ่มต้นกระบวนการแล้วลบไบนารีของมันฉันยังคงสามารถกู้คืนได้จาก/proc/&lt;pid&gt;/exe: $ cp `which sleep` . $ ./sleep 10m &amp; [1] 13728 $ rm sleep $ readlink /proc/13728/exe /tmp/sleep (deleted) $ cp /proc/13728/exe ./sleep-copy $ diff sleep-copy `which sleep` &amp;&amp; echo not different not different $ stat /proc/13728/exe File: ‘/proc/13728/exe’ -&gt; ‘/tmp/sleep (deleted)’ Size: 0 Blocks: 0 IO Block: 1024 …
23 linux  symlink  proc 

3
เหตุใด proc จึงเรียกว่าระบบไฟล์
procระบบไฟล์ช่วยให้เคอร์เนลในการสื่อสารข้อมูลเกี่ยวกับแต่ละขั้นตอนการทำงานบนระบบลินุกซ์ เหตุใดจึงprocเรียกว่าระบบไฟล์ ext4มันไม่ได้เป็นระบบไฟล์จริงเช่น มันเป็นเพียงชุดของไฟล์ที่มีข้อมูลเกี่ยวกับกระบวนการทำงาน
20 filesystems  proc 

2
ความสามารถในการพกพาของลิงค์ไฟล์อธิบาย
ฉันสงสัยอยู่เสมอ แต่ไม่เคยใช้เวลาในการค้นหาดังนั้นฉันจะทำตอนนี้ - การใช้งานแบบพกพาแสดงได้อย่างไรจากที่นี่/proc/$$/fd/$Nหรือ /dev/fd/$Nฉันเข้าใจการรับประกัน POSIX /dev/null, /dev/tty, and /dev/console (แม้ว่าฉันจะพบว่าในวันอื่น ๆ หลังจากอ่านความคิดเห็นในคำตอบนี้ )แต่แล้วคนอื่น ๆ เหล่านี้ล่ะ? เท่าที่ฉันสามารถบอกได้ว่าพวกเขาเป็นเรื่องธรรมดา แต่ในระบบใดที่ฉันไม่สามารถคาดหวังว่าจะพบพวกเขา ทำไมจะไม่ล่ะ? มีแนวโน้มที่จะพบหนึ่งมากกว่าอื่น ๆ ? พวกเขาจะแสดงเหมือนแอตทริบิวต์เสมอหรือไม่ ฉันมักจะใช้อุปกรณ์เหล่านี้อย่างกว้างขวางในทุกรูปแบบและฉันอยากจะรู้ว่าถ้ามีโอกาสฉันจะลองสั้น ๆ ควรเข้าใจคำถามข้างต้นเป็นเพียงสิ่งที่ฉันคิดว่าฉันอยากรู้ แต่เนื่องจากฉันต้องถามตั้งแต่แรกฉันอาจไม่ทราบดีที่สุดในเรื่องนี้และพวกเขาไม่ควรพิจารณาข้อกำหนดที่เข้มงวดสำหรับ คำตอบ. กรุณาช่วยฉันด้วยถ้าทำได้โปรดเถอะ

4
ทำไมเชลล์บางตัว `read` builtin ไม่สามารถอ่านบรรทัดทั้งหมดจากไฟล์ใน` / proc` ได้?
ในเชลล์คล้ายบอร์นบางตัวบิวอินreadไม่สามารถอ่านทั้งบรรทัดจากไฟล์ใน/proc(คำสั่งด้านล่างควรจะรันzshแทนที่$=shellด้วย$shellเชลล์อื่น ๆ ): $ for shell in bash dash ksh mksh yash zsh schily-sh heirloom-sh "busybox sh"; do printf '[%s]\n' "$shell" $=shell -c 'IFS= read x &lt;/proc/sys/fs/file-max; echo "$x"' done [bash] 602160 [dash] 6 [ksh] 602160 [mksh] 6 [yash] 6 [zsh] 6 [schily-sh] 602160 [heirloom-sh] 602160 [busybox sh] 6 readมาตรฐานต้องการอินพุตมาตรฐานต้องเป็นไฟล์ข้อความข้อกำหนดนั้นเป็นสาเหตุของพฤติกรรมที่หลากหลายใช่หรือไม่ …
19 linux  shell  proc  read 

2
/ proc / self ถูกนำไปใช้ใน Linux อย่างไร
ฉันกำลังยุ่งอยู่กับ/procระบบไฟล์ใน Linux และฉันเจอ/proc/selfซึ่งเป็นสัญลักษณ์เชื่อมโยงไปยังไดเรกทอรีกระบวนการของกระบวนการปัจจุบัน ฉันต้องการทราบวิธีการใช้งาน ทางออกหนึ่งคือการเปลี่ยน symlink นั้นในทุก ๆ context switchแต่เห็นได้ชัดว่ามันแพงมากเพราะมันเกี่ยวข้องกับการเข้าถึงดิสก์
19 process  proc 

2
สภาพแวดล้อมที่เปลี่ยนแปลงของกระบวนการทำงาน
ว่ามันอาจจะเป็นไปได้ที่จะปรับเปลี่ยนตัวแปรบางอย่างในenvการขั้นตอนการทำงานอยู่แล้วเช่นผ่าน/proc/PID/environ?นั่น "แฟ้ม" read-onlyคือ จำเป็นต้องเปลี่ยนหรือยกเลิกการตั้งค่าตัวแปร DISPLAY ของงานแบ็ตช์ที่รันนานโดยไม่ฆ่ามัน

5
ค้นหาอุปกรณ์ / dev / root ใดที่แสดงถึงใน Linux?
บน linux จะมี/dev/rootโหนดอุปกรณ์ /dev/sdaXนี้จะเป็นอุปกรณ์ป้องกันเช่นเดียวกับโหนดอุปกรณ์อื่นเช่น ฉัน/dev/rootจะแก้ไขโหนดอุปกรณ์ 'ของจริง' ในสถานการณ์นี้เพื่อให้ฉันสามารถแสดงชื่ออุปกรณ์ที่สมเหตุสมผลได้อย่างไร /proc/mountsตัวอย่างเช่นผมอาจจะพบกับสถานการณ์นี้เมื่อแยก ฉันกำลังมองหาวิธีแก้ปัญหาที่สามารถใช้งานได้จากสคริปต์ shell / python แต่ไม่ใช่ C
17 linux  proc  devices 

2
ฉันจะตรวจสอบว่า PID ที่ระบุกำลังทำงานอยู่ได้อย่างไร
ฉันกำลังเขียนสคริปต์ Perl ที่แยกวิเคราะห์ logfiles เพื่อรวบรวม PID แล้วตรวจสอบว่า PID นั้นทำงานอยู่หรือไม่ ฉันพยายามคิดวิธีที่ดีที่สุดในการตรวจสอบ เห็นได้ชัดว่าฉันสามารถทำสิ่งที่ชอบ: system("ps $pid &gt; /dev/null") &amp;&amp; print "Not running\n"; อย่างไรก็ตามฉันต้องการหลีกเลี่ยงการเรียกระบบถ้าเป็นไปได้ ฉันจึงคิดว่าฉันสามารถใช้/procระบบไฟล์ได้ (ความสะดวกในการพกพาไม่ใช่เรื่องที่น่ากังวลนี่จะทำงานบนระบบ Linux เสมอ) ตัวอย่างเช่น: if(! -d "/proc/$pid"){ print "Not running\n"; } ปลอดภัยไหม ฉันสามารถเดาได้หรือไม่ว่าหากไม่มี/proc/$pid/ไดเรกทอรี PID ที่เกี่ยวข้องไม่ทำงานอยู่ ฉันคาดหวังเช่นนั้นเนื่องจาก AFAIK psเองได้รับข้อมูลจากตัวเอง/procแต่เนื่องจากเป็นรหัสการผลิตฉันจึงต้องการให้แน่ใจ ดังนั้นจะมีกรณีที่กระบวนการทำงานไม่มี/proc/PIDไดเรกทอรีหรือมี/proc/PIDไดเรกทอรีอยู่และกระบวนการไม่ทำงานหรือไม่ มีเหตุผลใดที่ต้องการแยกวิเคราะห์psมากกว่าการตรวจสอบการมีอยู่ของไดเรกทอรีหรือไม่?

1
เป็นไปได้หรือไม่ที่จะรับ ID กลุ่มกระบวนการจาก / proc
ใน " /programming/13038143/how-to-get-pids-in-one-process-group-in-linux-os " ผมเห็นคำตอบทั้งหมดกล่าวขวัญและไม่มีการกล่าวขวัญps/proc "ps" ดูเหมือนจะไม่พกพาได้มาก (รุ่น Android และ Busybox คาดว่าจะมีข้อโต้แย้งที่แตกต่างกัน) และฉันต้องการแสดง pids ด้วย pgids ด้วยเครื่องมือที่ง่ายและพกพาได้ ใน /proc/.../status ฉันเห็นTgid:(ID กลุ่มเธรด), Gid:(รหัสกลุ่มเพื่อความปลอดภัยไม่ใช่สำหรับการจัดกลุ่มกระบวนการร่วมกัน) แต่ไม่ใช่PGid:... อะไรคือวิธีการอื่น ๆpsของการได้รับ pgid จาก pid?


5
อ่านสแต็คของกระบวนการอื่นได้หรือไม่
ฉันพยายามอ่านสแต็กของกระบวนการลูก แต่ไม่มีโชค ฉันรู้ว่ามันเป็นไปได้ที่จะใช้ptraceแต่ptraceอินเทอร์เฟซของอนุญาตให้คุณอ่านเพียงหนึ่งคำในแต่ละครั้งและฉันพยายามสแกนส่วนที่ใหญ่กว่าของสแต็ก ฉันได้ลองอ่าน/proc/$pid/memจากขอบเขตของสแต็คที่แยกออกมาจาก/proc/$pid/mapsไฟล์หลังจากใช้ ptrace เพื่อเชื่อมต่อกับมันเป็นครั้งแรก (ตามที่แนะนำไว้ที่นี่ ) แต่การอ่านทำให้ล้มเหลว (แม้ในขณะทำงานในฐานะรูท) อ่านจากส่วนต่าง ๆ ของกระบวนการ (เช่นกอง) ผมทำอะไรผิดหรือเปล่า? มีตัวเลือกอื่น ๆ อีกไหม?
16 linux  kernel  memory  proc 

3
ฟังเพื่อออกจากกระบวนการรับ pid $$
บอกว่าฉันมี pid อยู่ในมือ mypid=$$ มีคำสั่ง bash / system บ้างที่ฉันสามารถใช้ฟังเพื่อออกจากกระบวนการนั้นด้วย pid ที่กำหนด? หากไม่มีกระบวนการที่มี mypid อยู่ฉันเดาว่าคำสั่งควรล้มเหลว

1
คำสั่ง“ ss” ในแพ็คเกจ iproute; เหตุใดจึงใช้แบบสอบถามแผ่นตารางสำหรับซ็อกเก็ต timewait
ยกโทษให้ฉันถ้านี่ไม่ใช่ฟอรัมที่ดีที่สุดสำหรับคำถามนี้ แต่ดูเหมือนว่าจะเกี่ยวข้องกับเคอร์เนลมากกว่าที่จะเขียนโปรแกรมเอง ฉันกำลังเขียนสคริปต์ที่สืบค้นระบบสำหรับพอร์ตเปิดเพื่อให้เราสามารถสร้างกราฟและตรวจสอบสถิติได้ สำหรับสิ่งนี้ฉันใช้คำสั่ง "ss" จากแพ็คเกจ iproute หากคุณดำเนินการss -s|grep estabคุณจะได้รับผลลัพธ์เช่นนี้: TCP: 296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0 คำถามของฉันเกี่ยวกับตัวแปร timewait ซึ่งแสดงซ็อกเก็ตที่คำนวณในสถานะ TIME_WAIT เมื่อฉันพยายามหาตัวเลขที่อ้างอิงหลังจากสแลชมันกลายเป็นการผจญภัยในการค้นหาซอร์สโค้ดซึ่งท้ายที่สุดก็ทำให้ฉันพบตัวอย่างต่อไปนี้: printf("TCP: %d (estab %d, closed %d, orphaned %d, synrecv %d, timewait %d/%d), ports %d\n", s.tcp_total + slabstat.tcp_syns + s.tcp_tws, sn.tcp_estab, s.tcp_total …

4
ฉันจะเรียนรู้สิ่งที่ฉันสามารถทำได้กับ / proc และ / sys [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Unix &amp; Linux Stack Exchange ปิดให้บริการใน2 ปีที่ผ่านมา ฉันต้องการทราบเพิ่มเติมเกี่ยวกับการใช้งานขั้นสูงของ/procและ/sysระบบไฟล์เสมือน แต่ฉันไม่รู้ว่าจะเริ่มต้นอย่างไร ใครช่วยแนะนำแหล่งข้อมูลที่ดีให้เรียนรู้ได้บ้าง นอกจากนี้เนื่องจากฉันคิดว่า sys มีการเพิ่มเป็นประจำสิ่งที่ดีที่สุดในการทำให้ความรู้ของฉันเป็นปัจจุบันเมื่อเคอร์เนลใหม่ถูกปล่อยออกมา
15 linux  kernel  proc  sysfs 

2
ตรวจสอบว่ากระบวนการเฉพาะเป็น 32- หรือ 64- บิต
ให้เคอร์เนล 2.6.x หรือใหม่กว่า Linux และ userland ที่มีอยู่ซึ่งสามารถใช้งานทั้ง ELF32 และ ELF64 ไบนารี (เช่นที่ผ่านมาฉันจะรู้ได้อย่างไรว่า CPU ของฉันรองรับระบบปฏิบัติการ 64 บิตภายใต้ Linux? ) ฉันจะทราบได้อย่างไรว่ากระบวนการที่กำหนด โดย PID) กำลังทำงานในโหมด 32- หรือ 64- บิต? วิธีแก้ปัญหาไร้เดียงสาจะทำงาน: file -L /proc/pid/exe | grep -o 'ELF ..-bit [LM]SB' แต่ข้อมูลนั้นถูกเปิดเผยโดยตรง/procโดยไม่ต้องพึ่งพาlibmagicหรือไม่
14 linux  64bit  proc  elf 

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