ภูตคืออะไร


12

ฉันได้ยินจำนวนมากพูดคุยเกี่ยวกับ Daemons ที่ทำงานบนคอมพิวเตอร์ Ubuntu ของฉัน - พวกเขาคืออะไร?

คำตอบ:


15

ในระยะสั้นภูตเป็นกระบวนการพื้นหลัง

Daemons อาจเป็นโปรแกรมปกติที่ทำงานในพื้นหลัง แต่ส่วนใหญ่จะสร้างขึ้นโดยเริ่มต้นกระบวนการฟอร์กมันและออกจากพาเรนต์

เมื่อต้องการแยกกระบวนการหมายถึงการสร้างสำเนาที่แน่นอน ผู้ปกครองของกระบวนการว่าถ้าพ่อแม่ที่แท้จริงยุติทันทีคือตอนนี้initกระบวนการที่/sbin/initซึ่งเป็นสิ่งแรกที่เริ่มต้นบน Unix เหมือนทุกระบบปฏิบัติการ ตอนนี้กระบวนการนี้เรียกว่า Daemon แต่ก็ไม่มี TTY ที่เกี่ยวข้อง

นี่คือตัวอย่างของ Daemon ใน Python:

import sys, os, time

pid = os.fork()

# there now exist two processes
if pid > 0: # If this is the parent,
    sys.exit(0) # quit.

# this is the background part:
time.sleep(5)
print "Hello, World!"

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

หากคุณเรียกใช้ตัวอย่างคุณจะสังเกตเห็นหลังจากพิมพ์สองวินาทีแม้ว่ากระบวนการที่คุณเริ่มในบรรทัดคำสั่งจะสิ้นสุดลง สำเนาของกระบวนการนี้จะถูกเรียกใช้ 'โดย' init ทันที


8
ในการขยายตัวหากคุณมาที่ Linux จาก Windows คุณสามารถนึกถึง daemons ว่าเป็น "nix เทียบเท่ากับบริการ" "ของ Windows
nathwill

1
@ stefano-palazzo คุณพูดว่า "... มันไม่มี TTY ที่เกี่ยวข้องกับมัน" แต่แล้ว "... คุณจะสังเกตเห็นหลังจากสองวินาทีที่มันพิมพ์ ... " ฉันคิดว่าการถอด TTY หมายความว่าคุณไม่สามารถเขียนลงในเทอร์มินัลได้
Jorge Bucaran

1
@JorgeBucaran ใช่ การพิมพ์ค่อนข้างซน มันยังคงสามารถจัดการกับสตรีมเอาต์พุตมาตรฐานของ tty ที่สตาร์ทได้ เมื่อคุณเปิดไฟล์ (เช่น / dev / stdout) คุณจะได้รับหมายเลข (เรียกว่า file descriptor) และนั่นคือทั้งหมดที่คุณต้องเขียนลงไปตราบเท่าที่กระบวนการที่เปิดยังคงทำงานอยู่ (คุณสามารถเห็น เปิดไฟล์ใน/proc/*/fd) daemon ที่มีความประพฤติดีจะแยกตัวเองออกจาก tty อย่างสมบูรณ์โดยยกเลิกการจัดการไปยัง stdout, stderr และ stdin
Stefano Palazzo

1
@ StefanoPalazzo ฉันเห็น หนึ่งสามารถเก็บการอ้างอิงถึงกระบวนการของผู้ปกครอง std / out / err และยังคงแยกออกจากมัน ถ้าฉันสามารถอ้างอิง TTY โดยพลการได้แล้วมันหมายความว่าอย่างไรที่จะแยกกระบวนการ? ฉันพบว่า < superuser.com/questions/178587/… > มีประโยชน์ แต่ยังรู้สึกไม่ชัดเจน
Jorge Bucaran

1
@JorgeBucaran หมายถึงการเขียนทับ stdio ของกระบวนการเอง (เช่นโดยใช้dup2 ) กับสิ่งใหม่ที่คุณสร้างขึ้น (เช่นไฟล์บันทึก) นี่คือตัวอย่างเต็ม
Stefano Palazzo

1

ในระบบปฏิบัติการมัลติทาสกิ้งคอมพิวเตอร์ daemon เป็นโปรแกรมคอมพิวเตอร์ที่ทำงานเป็นกระบวนการพื้นหลังแทนที่จะอยู่ภายใต้การควบคุมโดยตรงของผู้ใช้แบบโต้ตอบ ตามเนื้อผ้าชื่อกระบวนการของ daemon ลงท้ายด้วยตัวอักษร d เพื่อชี้แจงว่ากระบวนการนั้นในความเป็นจริง daemon และสำหรับความแตกต่างระหว่าง daemon และโปรแกรมคอมพิวเตอร์ปกติ ตัวอย่างเช่น syslogd คือ daemon ที่ใช้เครื่องมืออำนวยความสะดวกในการบันทึกระบบและ sshd เป็น daemon ที่ให้บริการการเชื่อมต่อ SSH ขาเข้า

ตามที่คุณเห็นเลเยอร์ของภูต


2
ใบเสนอราคามาจากไหน
Zanna

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