เอกสารอาจสร้างความสับสนได้ดังนั้นนี่คือรูปแบบ Linux "ของจริง ":
- ภายในเคอร์เนล Linux บางสิ่งที่สามารถเรียกใช้ (& กำหนดเวลา) เรียกว่า "กระบวนการ"
- แต่ละกระบวนการมี ID กระบวนการเฉพาะ (PID) และ ID กลุ่มเธรด (TGID)
- กระบวนการ "ปกติ" มี PID = TGID และไม่มีกระบวนการอื่นแบ่งปันค่า TGID นี้
- กระบวนการ "เธรด" เป็นกระบวนการที่ค่า TGID ถูกแชร์โดยกระบวนการอื่น
- กระบวนการหลายอย่างที่ใช้ TGID เดียวกันก็แบ่งปันอย่างน้อยก็คือพื้นที่หน่วยความจำเดียวกันและตัวจัดการสัญญาณ
- หากกระบวนการ "เธรด" มี PID = TGID ก็สามารถเรียกได้ว่า "เธรดหลัก"
- การเรียก
getpid()
จากกระบวนการใด ๆ จะส่งคืน TGID (= "main thread" PID)
- การโทร
gettid()
จากกระบวนการใด ๆ จะส่งคืน PID (!)
- สามารถสร้างกระบวนการใด ๆ ด้วยการ
clone(2)
เรียกของระบบ
- ชื่อตัวเลขของโฟลเดอร์ที่คุณสามารถแสดงรายการด้วย
ls /proc
เช่นเดียวกับ/proc/NUMBER
TGID
- ชื่อที่
/proc/TGID/task
เป็น/proc/TGID/task/NUMBER
ตัวเลขของโฟลเดอร์เช่นเดียวกับPID
- แม้ว่าคุณจะไม่ได้เห็นทุก PIDs ที่มีอยู่กับคุณยังสามารถทำ
ls /proc
cd /proc/any_PID
สรุป : จากมุมมองของเคอร์เนลมีเพียงกระบวนการเท่านั้นซึ่งแต่ละกระบวนการมี PID ที่ไม่ซ้ำกันและเธรดที่เรียกว่าเป็นกระบวนการที่แตกต่างกัน
หมายเหตุ:การนำแนวคิด "เธรด" ไปใช้ใน Linux ทำให้เกิดคำศัพท์สับสนและหากgetpid()
คุณไม่ได้ทำตามที่คุณคิดก็เป็นเพราะพฤติกรรมของมันเป็นไปตาม POSIX ที่เข้ากันได้ (เธรดควรแบ่งปัน PID ทั่วไป) .