“ &” ที่ท้ายคำสั่ง linux หมายความว่าอย่างไร


99

ฉันเป็นผู้ดูแลระบบและถูกขอให้เรียกใช้สคริปต์ลินุกซ์เพื่อล้างระบบ

คำสั่งคือ:

perl script.pl > output.log &

ดังนั้นคำสั่งนี้จึงลงท้ายด้วย&เครื่องหมายมีความสำคัญเป็นพิเศษหรือไม่?

ฉันมีความรู้พื้นฐานเกี่ยวกับเปลือกหอย แต่ไม่เคยเห็นมาก่อน


ขอโทษที่ฉันไม่ดีฉันรู้เรื่องพื้นฐานเช่นนี้
Dude

3
หากคุณอยู่ในหน้านี้โดยมองหาความแตกต่างระหว่าง&และ&&: &เรียกใช้คำสั่งแรกในพื้นหลัง &&เรียกใช้คำสั่งแรกและดำเนินการตามเงื่อนไขไปยังคำสั่งที่สองหากออกด้วยความสำเร็จ
David Bodow

คำตอบ:


151

&ทำให้คำสั่งทำงานในพื้นหลัง

จากman bash:

หากคำสั่งถูกยุติโดยตัวดำเนินการควบคุม&เชลล์จะเรียกใช้คำสั่งในพื้นหลังในเชลล์ย่อย เชลล์ไม่รอให้คำสั่งเสร็จสิ้นและสถานะการส่งคืนคือ 0


13

นอกจากนี้คุณสามารถใช้เครื่องหมาย "&" เพื่อเรียกใช้กระบวนการต่างๆผ่านการเชื่อมต่อ ssh หนึ่ง (1) เพื่อรักษาจำนวนเทอร์มินัลขั้นต่ำไว้ ตัวอย่างเช่นฉันมีกระบวนการหนึ่งที่รับฟังข้อความเพื่อแตกไฟล์กระบวนการที่สองฟังข้อความเพื่ออัปโหลดไฟล์: การใช้ "&" ฉันสามารถเรียกใช้บริการทั้งสองในเทอร์มินัลเดียวผ่านการเชื่อมต่อ ssh เดียวกับเซิร์ฟเวอร์ของฉัน .


***** ฉันเพิ่งตระหนักว่ากระบวนการเหล่านี้ที่ทำงานผ่าน "&" จะ "มีชีวิตอยู่" หลังจากปิดเซสชัน ssh ค่อนข้างเรียบร้อยและมีประโยชน์หากการเชื่อมต่อกับเซิร์ฟเวอร์ถูกขัดจังหวะ **


nohupจะรักษากระบวนการต่างๆให้คงอยู่ด้วย
Jerry Chin

2
ด้วยและเราสามารถรับ PID ได้เช่นกันดังนั้นเราจึงสามารถยุติกระบวนการได้หากต้องการและเราสามารถตรวจสอบสถานะของกระบวนการนั้นได้
Dhaval Solanki

13

เมื่อไม่ได้รับคำสั่งเป็นอย่างอื่นจะเข้าควบคุมเบื้องหน้า คุณมีกระบวนการ "เบื้องหน้า" เพียงกระบวนการเดียวที่รันในเซสชันเชลล์เดียว สัญลักษณ์ & สั่งให้คำสั่งทำงานในกระบวนการเบื้องหลังและกลับไปที่บรรทัดคำสั่งทันทีสำหรับคำสั่งเพิ่มเติม

sh my_script.sh &

กระบวนการเบื้องหลังจะไม่คงอยู่หลังจากปิดเซสชันเชลล์ SIGHUPยุติกระบวนการทำงานทั้งหมด ตามค่าเริ่มต้นอยู่ดี หากคำสั่งของคุณทำงานเป็นเวลานานหรือทำงานไปเรื่อย ๆ (เช่น: microservice) คุณจำเป็นต้อง pr-pend ด้วย nohup เพื่อให้คำสั่งยังคงทำงานหลังจากที่คุณตัดการเชื่อมต่อจากเซสชัน

nohup sh my_script.sh &

แก้ไข:ดูเหมือนว่าจะมีพื้นที่สีเทาเกี่ยวกับการปิดกระบวนการพื้นหลังเมื่อ & ถูกใช้ เพิ่งทราบว่าเปลือกอาจปิดกระบวนการของคุณขึ้นอยู่กับระบบปฏิบัติการและการกำหนดค่าในท้องถิ่นของคุณ (โดยเฉพาะอย่างยิ่งใน CentOS / RHEL): https://serverfault.com/a/117157


3

ฉันไม่รู้แน่ชัด แต่ตอนนี้ฉันกำลังอ่านหนังสือและสิ่งที่ฉันได้รับคือโปรแกรมต้องจัดการสัญญาณของมัน (เหมือนตอนที่ฉันกดCTRL-C) ตอนนี้โปรแกรมสามารถใช้SIG_IGNเพื่อละเว้นสัญญาณทั้งหมดหรือSIG_DFLเรียกคืนการกระทำเริ่มต้น

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

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