ใช่. การสะกดเป็นทางแยก&
:
echo child & echo parent
สิ่งที่อาจทำให้คุณสับสน$$
คือไม่ใช่ PID ของกระบวนการเชลล์ แต่เป็น PID ของกระบวนการเชลล์ดั้งเดิม จุดที่ทำให้มันเป็นเช่นนี้คือ$$
ตัวระบุที่ไม่ซ้ำกันสำหรับอินสแตนซ์เฉพาะของเชลล์สคริปต์: มันจะไม่เปลี่ยนแปลงในระหว่างการทำงานของสคริปต์และมันแตกต่างจาก$$
สคริปต์อื่นที่รันพร้อมกัน sh -c 'echo $PPID'
วิธีการหนึ่งที่จะได้รับกระบวนการของเปลือกที่เกิดขึ้นจริงเป็น PID
โฟลว์คอนโทรลในเชลล์ไม่เหมือนกับ C. หากใน C คุณต้องการเขียน
first(); fork(); second(); third();
ดังนั้นเปลือกที่เทียบเท่าคือ
after_fork () { second; third; }
first; after_fork & after_fork
รูปแบบเปลือกง่ายfirst; child & parent
สอดคล้องกับสำนวน C ปกติ
first(); if (fork()) parent(); else child();
&
และ$$
มีอยู่และประพฤติเช่นนี้ในทุกเชลล์สไตล์ Bourne และใน (t) csh $PPID
ไม่มีอยู่ในเชลล์ Bourne แบบดั้งเดิม แต่อยู่ใน POSIX (ดังนั้นจึงเป็นแบบ Ash, bash, ksh, zsh, …)