คำถามติดแท็ก process-management

ใช้แท็กนี้เมื่อหัวข้อเกี่ยวกับการจัดการกระบวนการระบบ คำสั่งที่ใช้สำหรับสิ่งนี้เป็นเช่น ps และ kill -9 xxxx และบริการ xyz start | stop | restart และ htop มักใช้ร่วมกับการจัดการหน่วยความจำ

1
วิธีการตรวจสอบความพร้อมใช้งาน CPU พิเศษสำหรับกระบวนการที่กำลังทำงานอยู่
ในตอนแรกคำถามดูเหมือนจะงี่เง่า / สับสนเล็กน้อยเนื่องจากระบบปฏิบัติการทำหน้าที่จัดการการประมวลผลกระบวนการ อย่างไรก็ตามฉันต้องการวัดว่าบางกระบวนการมี CPU / IO-bound และฉันรู้สึกว่าระบบปฏิบัติการของฉันแทรกแซงการทดลองของฉันด้วยตัวอย่างเช่นกระบวนการ OS ที่กำหนดเวลาไว้ เป็นตัวอย่างสถานการณ์ต่อไปนี้: ฉันรันกระบวนการ A สองครั้งและรับผลลัพธ์ต่อไปนี้จากเครื่องมือ "time" (คอลัมน์เวลาเป็นวินาที): +---+-------+---------+-----------+---------+ |Run|Process|User Time|System Time|Wall time| +---+-------+---------+-----------+---------+ |1 |A |196.3 |5.12 |148.86 | |2 |A |190.79 |4.93 |475.46 | +---+-------+---------+-----------+---------+ อย่างที่เราเห็นแม้ว่าเวลาของผู้ใช้และระบบจะคล้ายกัน แต่เวลาที่ผ่านไปของการเปลี่ยนแปลงทั้งสองอย่างมาก (ต่างกันประมาณ 5 นาที) รู้สึกเหมือนบางสิ่งในสภาพแวดล้อมของฉันทำให้เกิดความขัดแย้งบ้าง ฉันต้องการหยุดกระบวนการพื้นหลัง / บริการทุกอย่างที่เป็นไปได้เพื่อหลีกเลี่ยงเสียงรบกวนใด ๆ ในระหว่างการทดสอบของฉัน แต่ฉันคิดว่าตัวเองเป็นผู้ใช้มือใหม่และผู้ใช้ระดับกลางระดับกลางและฉันไม่รู้วิธีรับประกันสิ่งนี้ ฉันใช้Linux 4.4.0-45-genericกับUbuntu 14.04 …

9
ตรวจสอบให้แน่ใจว่ากระบวนการทำงานอยู่เสมอ
ฉันเริ่มโฮสต์ไซต์สักครู่โดยใช้ Cherokee สำหรับแหล่งข้อมูลภายนอก (FastCGI ฯลฯ ) มีตัวเลือกในการเปิดใช้งานกระบวนการหากไม่พบหนึ่งที่ทำงานบนซ็อกเก็ตหรือพอร์ตที่กำหนด สิ่งนี้ดีมากเพราะมันหมายความว่าถ้า PHP หรือเว็บไซต์ Django ตกหลุม (บางครั้งก็ทำ) มันจะทำการรีสตาร์ทโดยอัตโนมัติ บนเซิร์ฟเวอร์ใหม่ที่ใช้ PHP-FPM ฉันไม่สามารถใช้ Cherokee (มีข้อผิดพลาดกับ PHP) ดังนั้นฉันจึงย้ายไปที่ NGINX ฉันชอบ NGINX (สำหรับรูปแบบการกำหนดค่า) แต่ฉันมีปัญหาร้ายแรงเกี่ยวกับกระบวนการที่ล้มเหลวและไม่ตอบสนอง PHP ทำเช่นนี้บางครั้ง แต่เว็บไซต์ Django มีปัญหามากกว่า ฉันได้สร้างสคริปต์เริ่มต้นสำหรับพวกเขาแล้วและพวกเขาก็เปิดเครื่อง แต่นี่ก็ไม่ได้ช่วยฉันเลยถ้าพวกเขาออกระหว่างการรีบูต ฉันเดาว่าฉันกำลังมองหาพร็อกซี FastCGI สิ่งที่เชโรกีรู้ว่ากระบวนการใดควรทำงานบนซ็อกเก็ต / พอร์ตและตอบสนองตามความต้องการ สิ่งนั้นมีอยู่จริงหรือไม่? มีวิธีใดที่จะสร้างสิ่งนี้ลงใน NGINX (เพื่อความสะดวกในการกำหนดค่า)

2
ฉันจะดูกระบวนการที่กำลังทำงานอยู่ได้อย่างไร?
ฉันใช้ Ubuntu Server 10.10 และฉันต้องการดูว่ากระบวนการใดทำงานอยู่ ฉันรู้ว่า PostgreSQL กำลังทำงานบนเครื่องของฉัน แต่ฉันไม่สามารถเห็นมันด้วยคำสั่งtopหรือpsดังนั้นฉันคิดว่าพวกเขาจะไม่แสดงกระบวนการทำงานทั้งหมด มีคำสั่งอื่นที่จะแสดงกระบวนการทำงานทั้งหมดหรือมีพารามิเตอร์อื่น ๆ ที่ฉันสามารถใช้กับtopหรือpsสำหรับสิ่งนี้

4
วิธีฆ่าหลายกระบวนการ
ค้นหา PID ของกระบวนการเพื่อฆ่าการใช้: pgrep <process command> ฉันใช้คำสั่ง kill เพื่อฆ่า PID ที่ส่งคืนโดย pgrep <process command> kill <PID> คำสั่งเหล่านี้สามารถนำมารวมกันเป็นหนึ่งเพื่อให้สามารถฆ่า PID หรือ PID กลับโดยpgrep <process command>? หรือมีวิธีการฆ่าหลายกระบวนการด้วยชื่อคำสั่ง? สิ่งที่ต้องการ : kill(pgrep <name of process>)

6
จะทำให้กระบวนการมองไม่เห็นต่อผู้ใช้รายอื่นได้อย่างไร
คุณจะเปิดกระบวนการและทำให้มันมองไม่เห็นtopคำสั่งได้อย่างไร กระบวนการเริ่มต้นโดยผู้ใช้ปกติ (ไม่ใช่รูท) และผู้ใช้ปกติรายอื่นไม่ควรมองเห็น

2
คุณค่าความดีของ (-) หมายถึงอะไร
ตามหน้า man และ wikipedia; niceช่วงจาก -20 ถึง 20 แต่เมื่อฉันเรียกใช้คำสั่งต่อไปนี้ฉันพบว่าบางกระบวนการมีค่าที่ไม่ใช่ตัวเลขเช่น (-) ดูคอลัมน์ที่หกจากด้านซ้ายด้วยชื่อ 'NI' ความอ่อนโยนของ (-) บ่งบอกอะไร? ps axl F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 4 0 1 0 20 0 19356 1548 poll_s Ss ? 0:00 /sbin/init 1 0 2 0 20 0 0 …

2
ต่อไฟร์วอลล์กระบวนการ?
ฉันอ่านมาแล้ว แต่ไม่สามารถหาวิธีสร้างกฎไฟร์วอลล์ต่อกระบวนการได้ ฉันรู้iptables --uid-ownerแต่ก็ใช้ได้กับการรับส่งข้อมูลขาออกเท่านั้น ฉันได้พิจารณาการเขียนสคริปต์netstatและiptablesแต่ดูเหมือนว่าไม่มีประสิทธิภาพชะมัดเพราะถ้ากระบวนการที่มีการใช้งานเฉพาะสำหรับขนาดเล็กกรอบเวลาสคริปต์ที่อาจจะพลาดมัน โดยทั่วไปฉันต้องการบังคับใช้ข้อ จำกัด เฉพาะเกี่ยวกับพอร์ตและ dst ในกระบวนการขณะที่ปล่อยให้กระบวนการอื่นไม่ได้รับผลกระทบ ความคิดใด ๆ สำหรับการอ้างอิง selinux สามารถทำสิ่งนี้ได้และมันก็ทำงานได้ค่อนข้างดี การตั้งค่าเป็นเรื่องที่เจ็บปวดเล็กน้อย

2
กระบวนการใน UNIX มีหมายเลขอย่างไร
ฉันไม่พบรูปแบบใด ๆ เมื่อดูที่การกำหนดหมายเลข PID ในตารางกระบวนการ ( ps -a) เนื่องจาก PID ไม่ใช่ตัวเลขที่ตามมาและบางครั้งมี "ช่องว่าง" ขนาดใหญ่ระหว่างตัวเลขเหล่านั้น เป็นเพราะอาจมีกระบวนการบางอย่างที่ทำงานในช่วงเวลาสั้น ๆ และพวกเขาจอง PID บางส่วน? มีบางช่วงหลังจากที่จำนวนกระบวนการรีเซ็ตหรือไม่ ฉันใช้ Mac OS X แต่ฉันเดาว่าคำตอบควรใช้กับ UNIX โดยทั่วไป

5
ข้อแตกต่างระหว่าง ps และคำสั่ง top คืออะไร?
ความแตกต่างระหว่างpsและtopคำสั่งคืออะไร? ฉันเห็นว่าทั้งสองสามารถแสดงข้อมูลเกี่ยวกับกระบวนการทำงาน ควรใช้อันไหนเมื่อไหร่?

2
ฆ่ากระบวนการที่ถูกระงับหรือไม่
ฉันสับสนเล็กน้อยโดย: % vim tmp zsh: suspended vim tmp % kill %1 % jobs [1] + suspended vim tmp % kill -SIGINT %1 % jobs [1] + suspended vim tmp % kill -INT %1 % jobs [1] + suspended vim tmp ดังนั้นฉันจึงลาออกเพื่อ "ทำเอง" และสงสัยว่าทำไมในภายหลัง: % fg [1] - continued vim tmp …

2
ฉันจะตรวจสอบว่า PID ที่ระบุกำลังทำงานอยู่ได้อย่างไร
ฉันกำลังเขียนสคริปต์ Perl ที่แยกวิเคราะห์ logfiles เพื่อรวบรวม PID แล้วตรวจสอบว่า PID นั้นทำงานอยู่หรือไม่ ฉันพยายามคิดวิธีที่ดีที่สุดในการตรวจสอบ เห็นได้ชัดว่าฉันสามารถทำสิ่งที่ชอบ: system("ps $pid > /dev/null") && 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
<defunct> หมายถึงอะไรในเอาท์พุทของ ps?
ฉันได้ออกps -ef|grep javaคำสั่งและนี่เป็นหนึ่งในรายการที่ฉันได้รับ: subhrcho 875 803 0 Jan23 pts/5 00:02:27 [java] &lt;defunct&gt; อะไรคือสิ่งที่&lt;defunct&gt;อ้างว่าที่นี่? กระบวนการนั้นเป็นกระบวนการที่มี PID = 875 หรือไม่

4
Ctrl-C พร้อมกับสองคำสั่งพร้อมกันในทุบตี
ฉันต้องการเรียกใช้สองคำสั่งพร้อมกันในทุบตีบนเครื่อง Linux ดังนั้นใน./execute.shทุบตีสคริปต์ของฉันฉันใส่: command 1 &amp; command 2 echo "done" อย่างไรก็ตามเมื่อฉันต้องการหยุดสคริปต์ทุบตีและกดCtrl+ Cเฉพาะคำสั่งที่สองเท่านั้นที่หยุด คำสั่งแรกยังคงทำงานอยู่ ฉันจะแน่ใจได้อย่างไรว่าสคริปต์ทุบตีสมบูรณ์หยุดทำงาน หรือไม่ว่าในกรณีใดฉันจะหยุดคำสั่งทั้งสองได้อย่างไร เพราะในกรณีนี้ไม่ว่าฉันจะกดCtrl+ Cคำสั่งที่ทำงานต่อไปบ่อยแค่ไหนและฉันก็ถูกบังคับให้ปิดเทอร์มินัล

3
Systemd และกระบวนการวางไข่
ปกติจะไม่โพสต์ที่นี่ แต่ฉันกำลังฉีกผมออกไปมากกว่านี้ ฉันมีสคริปต์ Python ที่เรียกใช้เมื่อมันเปิดตัวและมีหน้าที่รับผิดชอบในการเริ่มต้นกระบวนการอื่น ๆ สคริปต์นี้เคยเปิดตัวเมื่อเริ่มต้นผ่าน sysvinit แต่เมื่อเร็ว ๆ นี้ฉันอัพเกรดเป็น Debian Jessie ดังนั้นจึงได้ปรับให้เปิดใช้งานผ่าน systemd น่าเสียดายที่ฉันพบปัญหาฉันไม่สามารถทำงานได้ เมื่อคุณเรียกใช้สคริปต์โดยตรงในเชลล์ผู้ใช้มันจะเปิดใช้งานกระบวนการลูกอย่างถูกต้องและเมื่อสคริปต์ออกจากกระบวนการลูกจะถูกกำพร้าและทำงานต่อไป เมื่อเปิดตัว Via systemd หากกระบวนการหลักออกไปเด็ก ๆ ก็ออกจากกันด้วย (หน้าจอก็จะเริ่มตายและปรากฏเป็น Dead ???) เป็นการดีที่ฉันจะต้องสามารถเริ่มต้นสคริปต์แม่โดยไม่ต้องฆ่ากระบวนการลูกทั้งหมดมีบางสิ่งที่ฉันหายไป? ขอบคุณ! [Unit] Description=Server commander After=network.target [Service] User=serveruser Type=forking PIDFile=/var/Server/Server.pid ExecStart=/var/Server/Server.py ExecStop=/bin/kill -s TERM $MAINPID [Install] WantedBy=multi-user.target แก้ไข: มันอาจเกี่ยวข้องกับฉันที่จะชี้ให้เห็นว่าสคริปต์ Python นั้นเป็น 'ตัวควบคุม' สำหรับกระบวนการลูก มันเริ่มและหยุดเซิร์ฟเวอร์ในหน้าจอ …

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