Tuesday, April 1, 2008

process

การจัดการกับ process

process คือ programme ที่กำลังดำเนินไปในขณะใดขณะหนึ่ง สำหรับขณะนี้ ใคร่ขอเสนอจำเพาะเรื่องง่ายๆ พื้นๆของ process ก่อนคือ ดูสถานะของ process การหยุด process

การดูสถานะของ process
ใน FreeBSD การดูว่าขณะนี้ระบบมี process อะไรกำลังดำเนินไปอยู่สามารถกระทำได้ด้วยคำสั่ง ps(1) โดยกำหนด options ต่างๆดังนี้

# ps -axu

ผลลัพธ์มันจะหลาย column ยังไงก็ช่าง แต่เบื้องต้น ขอให้สนใจจำเพาะ ๒ column แรก และ column ขวาสุด ซึ่งมีหัว column เป็น USER, PID, COMMAND ตามลำดับนั้น
ความจริงแทบจะไม่ต้องบรรยายอะไรมากเลย เพราะก็บอกชัดๆอยู่แล้วว่าหมายถึง ชื่อ ของผู้เป็นเจ้าของ process นั้นๆ ซึ่ง ชื่อ นี้ก็คือ login ID ที่ใช้ในตอน login นั่นเองสำหรับ column แรกสุด
ส่วน column ขวาสุด ก็เห็น และเข้าใจได้เลยว่า process นั้นใช้คำสั่งอะไรวิ่ง
และที่สุด column ที่เหลือ นั้น หมายถึง process identification ที่กำลังวิ่งอยู่ว่ามีหมายเลข process อะไร การเรียกด้วยหมายเลข ทำให้สะดวก และง่ายขึ้น

รายละเอียดที่เหลือ สามารถหาอ่านเอาเองได้จาก man 1 ps ซึ่งก็คือที่เขียนไว้เป็น ps(1) ในตอนต้นนั่นเอง อย่างไรก็ดีก่อนจากในภาคนี้ ขอแนะให้ท่านลองสั่ง

# ps -axuwwwwww

คือให้ต่อท้ายด้วยตัว w ไปให้มากโดยเริ่มที่ ๑ ตัวก่อน แล้วเพิ่มไปทีละตัว แล้วสังเกตุถึงความแตกต่างที่เห็น

การหยุด process
สำหรับการหยุด process นั้น เราอาศัย pid ที่ได้จากภาคที่แล้วมาใช้ประโยชน์ โดยการสั่ง ฆ่า process นั้นๆ คำสั่งที่ใช้คือ kill(1) รูปแบบของคำสั่งทั่วๆไปคือ

# kill PID

เมื่อ PID นั้นคือหมายเลขของ process ที่ได้จาก ps(1) ที่ได้นำเสนอไปแล้ว
บางครั้งเราพบว่าแม้จะสั่ง ฆ่า ไปแล้ว แต่ process นั้นๆยังไม่ตายทันที และบางทีก็นานจนสังเกตุได้ด้วย กว่าจะตาย วิธีแก้ไขคือ ตอนสั่ง ฆ่า ไปนั้น เราต้องบอกด้วยว่า ใช้อาวุธอะไร สำหรับฆ่า เพราะบางที นักฆ่า เขาอาจจะเอาอาวุธพื้นๆไปใช้กับเป้าหมายที่ เส้นใหญ่ ก็ได้
อาวุธ ที่ใช้ฆ่าในที่นี้ก็คือ options ของคำสั่ง kill(1) นั่นเอง ดังนี้แล้ว โดยเนื้อแท้แล้ว
รูปแบบของคำสั่งทั่วๆไปคือ

# kill -option PID

อาวุธที่ฆ่าได้ตายสนิทคือ 9 ซึ่งแทบจะทุก process เมื่อเจอ option นี้เข้า หนีไม่รอด ตายถาวร ตายสนิท

# kill -9 pid

แทบจะทุก pid ที่เราเป็นเจ้าของ ถูกฆ่า หรือ หยุดแน่นอน

มีเรื่องขำๆที่เกี่ยวกับ process อยู่ก็คือการสั่งให้ process ใด process หนึ่ง หยุด, วิ่ง หรือ พักการทำงานก่อนชั่วขณะ
เรื่องมีอยู่ว่าในระบบปฏิบัติการระบบหนึ่ง มี process ที่กำลังวิ่งอยู่ขณะนั้นหลาย processes แหละ และตัวจัดการกับลำดับของ processes ต่างๆ เขาก็เรียงลำดับไว้อย่างดีว่า หมายเลขไหน ควรจะได้รับลำดับสูง หมายเลขไหน ควรจะชลอ ฯลฯ
ขณะนั้นเอง process A เขาก็ร้องว่า นี่งานด่วนเลยนะ เส้นใหญ่ด้วย ระดับ kernel น้า ฯลฯ
ฝ่ายผู้จัดการ process เขาก็บอกว่า เออ เดี๋ยวจะดูให้ว่ามีใครอู้งานมั่ง ก็พอดีเจอว่า process E แทบไม่ได้ทำอะไรสลักสำคัญนัก แต่ว่าเอาแค่ขยันโชว์ผลงานให้เจ้านาย ผู้จัดการ process เห็นดังนั้นจึงบอกกับ process E ว่า

'นี่ๆ ไปนอนก่อนได้ไหม จะได้มีที่ว่างให้น้องเอ (process A) เขาทำงานมั่ง'

เมื่อสั่งแล้วก็ไม่ได้ดูว่าเขาจะทำตามหรือไม่ เอาแต่ไปจัดการต่างๆเพื่อให้น้องเอได้ทำงาน
ฝ่าย process E เมื่อรับคำสั่งก็นึกในใจว่า


'อืมม ก็เราไม่ง่วงนี่หว่า จะไปนอนทำไม' ว่าแล้วก็ง่วนกับงานของตัวเองต่อไปเรื่อยๆ

น้องเอ เมื่อจบงานด่วนแล้วก็แจ้งกับ ผู้จัดการ process ว่า พี่ๆงานเสร็จเรียบร้อยดีแล้วค่า ขอบใจน้า
ข้างฝ่าย ผจก. ก็พยักหน้ารับทราบ แล้วมาตรวจดูว่า อืมม ใครนะควรจะได้รับให้วิ่งต่อไป ก็พบว่าตนเองสั่งให้ คุณ E ไปนอน ก็เลยไปปลุก

'น้องอีๆ ตื่นๆๆ ตื่นมาทำงานต่อ'
'อ้าว ก็ฉันไม่ได้นอนนี่ จะไปตื่นทำไม'
น้องอีตอบ
'แล้วนี่ก็ทำงานแทบตายอยู่แล้ว มาสั่งอะไรกันนักกันหนา ฮึ'
'เฮ้ยๆ แล้วนั่นทำอะไรไปละนั่น ยุ่งละซิทีนี้'

เอาแล้วซิ ทีนี้ก็ไปกันใหญ่แล้วหละ เพราะไม่รู้เหมือนกันว่า process ที่ไม่สามารถควบคุมได้นั้น จะสร้างความเสียหายให้กับระบบไว้ที่ไหน อย่างไรบ้าง

2 comments:

Ohzilla said...

น้องอีก็ต้องทำงานในหน้าที่ของมันเหมือนเดิมไม่ใช่หรือครับ

มะขาม said...

น้อง อี หรือ process E ต้องหยุดงาน ตอนที่ได้รับคำสั่งให้หยุดครับ และกลับมาเริ่มงานใหม่ เมื่อได้รับคำสั่งให้ทำงานต่อ
ขอบคุณครับ ที่ร่วมแสดงความคิดเห็น


View My Stats