พิจารณาการnohup
ดำเนินการต่อไปนี้:
nohup script.sh > script.out &
มีวิธีออกจากระบบเทอร์มินัลเชื่อมต่อนำกระบวนการกลับมาทำงานเบื้องหน้าและโต้ตอบกับมันโดยใช้คีย์บอร์ดหรือไม่
พิจารณาการnohup
ดำเนินการต่อไปนี้:
nohup script.sh > script.out &
มีวิธีออกจากระบบเทอร์มินัลเชื่อมต่อนำกระบวนการกลับมาทำงานเบื้องหน้าและโต้ตอบกับมันโดยใช้คีย์บอร์ดหรือไม่
คำตอบ:
หากคุณต้องการเริ่มต้นสคริปต์ให้รันโดยไม่รบกวนเอาต์พุตของเทอร์มินัลจากนั้นนำขึ้นมาใช้ภายหลังเพื่อโต้ตอบกับมันคุณอาจต้องการดูที่เทอร์มินัลมัลติเพล็กเซอร์ ทั้งนี้ขึ้นอยู่กับระบบของคุณฉันจะแนะนำหรือtmux
screen
คุณสามารถหาข้อมูลเกี่ยวกับวิธีการใช้ในลิงค์ด้านล่าง:
tmux:
หน้าจอ:
แก้ไข: เพิ่มลิงค์สำหรับ tmux primers
nohupไม่ได้ตัดการเชื่อมต่อคำสั่งจากเทอร์มินัลมันทำให้สคริปต์ของคุณเพิกเฉยSIGHUP
และเปลี่ยนเส้นทางstdout/stderr
ไปยังไฟล์nohup.out
เพื่อให้คำสั่งสามารถทำงานต่อในพื้นหลังหลังจากที่คุณออกจากระบบ
nohup
ไม่ทำให้คำสั่งนั้นทำงานโดยอัตโนมัติในพื้นหลัง &
หนึ่งจะต้องทำอย่างนั้นอย่างชัดเจนโดยสิ้นสุดบรรทัดคำสั่งด้วย
$ nohup ./script.sh &
[1] 3390
$ nohup: ignoring input and appending output to ‘nohup.out’
jobs
สามารถพิมพ์งานที่กำลังทำงานอยู่และสถานะของพวกเขา หากคำสั่งjobs
ไม่สามารถค้นหาได้แสดงว่าไม่มีกระบวนการย่อยของเชลล์นั้นอีกต่อไป
$ jobs
[1]+ Running nohup ./script.sh &
หนึ่งสามารถนำกลับมางานพื้นหลังในเบื้องหน้าในทุบตีใช้แม้ว่าจะทำงานด้วยfg
nohup
แต่ที่จะไม่เปลี่ยนการเปลี่ยนเส้นทางการส่งออกซึ่งจะยังคงได้รับไปยังแฟ้มnohup.out
$ fg
nohup ./script.sh
หากคุณปิดเชลล์ / เทอร์มินัลหรือออกจากระบบคำสั่งของคุณจะไม่เป็นลูกของเชลล์นั้นอีกต่อไป มันเป็นinit
กระบวนการ หากคุณค้นหาpstree
คุณจะเห็นว่าตอนนี้มันเป็นของกระบวนการ 1 ( init
) สิ่งนั้นไม่สามารถนำกลับมาที่เบื้องหน้าได้เพราะพื้นหน้าไม่มีอยู่อีกต่อไป
If the command jobs cannot find it, then it is no longer a child process of that shell.
สิ่งนี้ผิด: ลองลำดับนี้เพื่อดูว่า: sleep 100 & disown ; echo Jobs:; jobs; echo Tree:; pstree -ap $$
. หลังจากคำสั่งนี้คุณจะยังคงเห็นการsleep
ทำงานกับ PID เดียวกันที่พิมพ์ออกมาเมื่อคุณวางมันในขณะที่jobs
จะพิมพ์อะไร วิธีเดียวที่กระบวนการของเด็กสามารถหยุดการเป็นเด็กกำลังสูญเสียผู้ปกครอง (จากนั้นเด็กกำพร้าจะกลายเป็นลูกของinit
) หรือการตี + ออก (แต่จากนั้น PID จะเปลี่ยนดังนั้นจึงไม่ใช่เด็กคนแรก)
ฉันจะสองใช้เทอร์มินัลมัลติเพล็กเซอร์ แต่tmuxไม่ใช่หน้าจอ หน้าจอคือสำหรับสีและวัตถุประสงค์ทั้งหมด การกำหนดค่าของมันคือศิลปะมืดซึ่งน่าจะถูกบันทึกเป็นครั้งแรกในภาคผนวกของ Necronomicon ความพยายามที่จะเขียนการกำหนดค่าของคุณเองเป็นเหลือบของ Cthulu อย่างจริงจัง. มองไปรอบ ๆ ที่ผู้คนไฟล์ .screenrc เพื่อให้แน่ใจว่ามีวิธีที่จะไกล่เกลี่ยสิ่งที่น่ารังเกียจของหน้าจอ config flle Byobuทำงานได้อย่างน่าชื่นชมในฐานะที่เป็นม่านกั้นระหว่างผู้ใช้มรรตัยและรหัสที่ไม่บริสุทธิ์ มันมาพร้อมกับสีที่สมเหตุสมผลส่วนต่อประสานเมนูและที่สำคัญที่สุดคือแถบสถานะ
แต่อย่างที่ฉันบอกฉันแนะนำtmuxแทน มันยังคงต้องใช้การกำหนดค่าเล็กน้อย แต่มีการบันทึกไว้อย่างดีและไฟล์กำหนดค่าของคุณจะไม่ดูเหมือนคำพูดไร้สาระ นอกจากนี้คุณเริ่มด้วยสีและแถบสถานะ เปรียบเทียบไฟล์ screenrc และ tmux.conf ของฉัน:
หากคุณสนใจที่จะมองหาหมวกถ่ายทอดสดผลลัพธ์นี้อาจเหมาะกับคุณ:
nohup script.sh 2>&1 script.out &
# later:
tail -f script.out
คำสั่ง Linux ใด ๆ สามารถส่งไปยังพื้นหลังด้วย ' &
' ต่อท้ายในที่สุด
ในการดูงานพื้นหลังทั้งหมดคุณสามารถออก jobs
jobs
[1] + suspended nohup sh zookeeper-server-start.sh ../config/zookeeper.properties
[2] running nohup sh kafka-server-start.sh ../config/server.properties
[3] - running nohup sudo mongod --dbpath=/var/lib/mongodb
ที่นี่ฉันทำงาน 3 งานในพื้นหลัง: zookeeper, kafka และ mongo daemon [1], [2] และ [3] เป็นหมายเลขงานตามลำดับสำหรับงานเหล่านี้
คุณสามารถนำงานเหล่านั้นมาทำงานเบื้องหน้าได้ fg %$taskNumber.