Showing posts with label flags. Show all posts
Showing posts with label flags. Show all posts

Wednesday, September 10, 2008

flags : ชายธง

ชายธง เปล่า มิได้หมายเอาคำว่า พื้นที่ชายธง หรือ ชาย ที่ชื่อ ธง แต่อย่างไร แต่หมายถึงคำว่า ปลายธง โดยตรงเลยทีเดียว
ถอดมาจากคำฝรั่งว่า _flags ที่ใช้ร่วมกับคำต่างๆในแฟ้ม /etc/rc.conf ซึ่งหมายถึง command line options นั่นเอง แลสืบเนื่องจาก ที่เขาเป็นส่วนของคำตอนท้ายสุดเสมอๆ จึงเลือกใช้ ชายธง แทนคำนี้ มากกว่าที่จะใช้ ปลายธง

เหตุผลไม่สมประกอบนักหรอก

ที่ต้องนำมาขึ้นเหลา เพราะดูว่าจะเป็นประโยชน์กับเพื่อนๆชาว BSD ที่ต้องเรียกคำสั่งใช้งาน พร้อมกับ options ต่างๆตั้งแต่แรกเริ่มเปิดเครื่อง เรียกว่า พอเปิดปุ้บ ก็ติดปั้บ อะไรทำนองนั้น

ตัวอย่างเช่นเราจะกำหนดว่า ให้เครื่องเราวิ่ง natd -m -u ซึ่งเรารู้อยู่ว่า เพียงแค่สั่ง

natd_enable="YES"

ในแฟ้ม /etc/rc.conf ก็ได้แล้ว แต่กับ option -m -u ล่ะ จะกำหนดยังไง
จากสัญชาติญานดิบ บอกได้ว่า น่าจะตามด้วยพวก _flags นี่แหละ เลยลองเดาดู โดยกำหนดอีกหนึ่งบรรทัด ในแฟ้มเดียวกันนั่นแหละ

natd_flags="-m -u"

แล้วก็สั่ง shutdown now ซึ่งพอเครื่องถามหา shell ก็เคาะ Enter ไปแล้วรีบตามด้วยคำสั่ง exit ทันที และเมื่อระบบเข้าสู่ภาวะปกติ ให้ login เป็น root แล้วตรวจดู process ด้วยคำสั่ง

# ps axw | grep natd | grep -v grep

เราจะพบทันที ดังนี้

2198 ?? Ss 0:00.68 /sbin/natd -m -u -n em0

ก็คงได้แนวคิดบ้างน่ะ และก็ อ้อ หากจะพอมีดีบ้าง ก็ขอยกให้เป็นของขวัญวันเกิดลูก เขาก็แล้วกัน

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 ที่ไม่สามารถควบคุมได้นั้น จะสร้างความเสียหายให้กับระบบไว้ที่ไหน อย่างไรบ้าง

View My Stats