คำถามติดแท็ก background-process

กระบวนการ 'เบื้องหลัง' เป็นกระบวนการคอมพิวเตอร์ที่เรียกใช้ "เบื้องหลัง" (เช่นในพื้นหลัง) และไม่มีการแทรกแซงจากผู้ใช้ งานทั่วไปสำหรับการใช้กระบวนการดังกล่าวรวมถึงการบันทึกการตรวจสอบระบบการตั้งเวลาและการแจ้งเตือนผู้ใช้ ใช้แท็กนี้สำหรับคำถามใด ๆ เกี่ยวกับกระบวนการพื้นหลัง

3
คุณจะส่งแอพบรรทัดคำสั่งไปยังพื้นหลังโดยตรงได้อย่างไร
ฉันรู้แล้วว่าการกดctrl+zหยุดแอพจากนั้นฉันสามารถส่งแอปไปที่พื้นหลังด้วยbgคำสั่ง แต่นั่นหมายความว่ามีช่วงเวลาสั้น ๆ ที่แอพหยุดทำงาน ฉันจะส่งแอพไปยังพื้นหลังโดยตรงโดยไม่หยุดได้อย่างไร

2
+/- หลังจากงานในพื้นหลังเสร็จสิ้น
รันงานในพื้นหลัง $ command & เมื่อเสร็จสิ้นเครื่องจะพิมพ์ออกมา [n]+ command หรือ [n]- command ดังนั้นบางครั้งมันเป็นบวกและครั้งอื่น ๆ [n]มันเป็นดังต่อไปนี้ลบ บวก / ลบหมายความว่าอย่างไร

1
ทำไมฟังก์ชั่นจะไม่กลับมาจนกว่ากระบวนการพื้นหลังจะสิ้นสุด
พิจารณาสคริปต์นี้: #!/bin/bash function start { leafpad & echo $! } PID=$(start) echo "PID is $PID" สคริปต์ไม่ดำเนินการผ่านวงเล็บปีกกาปิดจนกว่ากระบวนการ leafpad จะสิ้นสุดลงแม้ว่าจะเป็นกระบวนการพื้นหลัง ทำไมนี้ เป็นไปได้หรือไม่ที่จะเริ่มกระบวนการพื้นหลังจากฟังก์ชั่น?

8
การเรียกใช้สคริปต์ทุบตีหลาย ๆ ชุดและเรียกใช้พร้อมกันไม่ใช่เรียงตามลำดับ
สมมติว่าฉันมีสาม (หรือมากกว่า) สคริปต์ทุบตี: script1.sh, และscript2.sh script3.shผมอยากจะเรียกทั้งสามของสคริปต์เหล่านี้และเรียกพวกเขาในแบบคู่ขนาน วิธีหนึ่งในการทำเช่นนี้คือเพียงเรียกใช้คำสั่งต่อไปนี้ nohup bash script1.sh & nohup bash script2.sh & nohup bash script3.sh & (โดยทั่วไปสคริปต์อาจใช้เวลาหลายชั่วโมงหรือหลายวันจึงจะเสร็จสิ้นดังนั้นฉันต้องการใช้nohupเพื่อให้สคริปต์ทำงานต่อไปแม้ว่าคอนโซลของฉันจะปิด) แต่มีวิธีใดบ้างที่จะดำเนินการคำสั่งทั้งสามนี้ควบคู่กับการโทรครั้งเดียว ? ฉันกำลังคิดอะไรบางอย่างเช่น nohup bash script{1..3}.sh & แต่นี้จะปรากฏในการดำเนินการscript1.sh, script2.shและscript3.shในลำดับที่ไม่ได้อยู่ในแบบคู่ขนาน


7
เหตุใดกระบวนการพื้นหลัง Python ของฉันจึงสิ้นสุดลงเมื่อเซสชัน SSH ถูกยกเลิก
ฉันมีสคริปต์ทุบตีที่เริ่มต้นสคริปต์ python3 (เรียกมันว่าstartup.sh) โดยใช้บรรทัดสำคัญ: nohup python3 -u <script> & เมื่อฉันsshเข้าใช้งานโดยตรงและเรียกสคริปต์นี้สคริปต์ python ยังคงทำงานในพื้นหลังหลังจากที่ฉันออก อย่างไรก็ตามเมื่อฉันเรียกใช้สิ่งนี้: ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "./startup.sh" กระบวนการจะสิ้นสุดลงทันทีที่sshดำเนินการเสร็จและปิดเซสชัน ความแตกต่างระหว่างสองคืออะไร? แก้ไข: สคริปต์หลามกำลังเรียกใช้บริการเว็บผ่านทางขวด แก้ไข 2: ฉันยังพยายามสร้างสคริปต์เริ่มต้นที่เรียกstartup.shและเรียกใช้ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "sudo service start <servicename>"แต่ทำงานเหมือนเดิม แก้ไข 3: อาจเป็นอย่างอื่นในสคริปต์ นี่คือส่วนใหญ่ของสคริปต์: chmod 700 ${key_loc} echo "INFO: Syncing files." rsync -azP -e …

2
ฆ่ากระบวนการที่ถูกระงับหรือไม่
ฉันสับสนเล็กน้อยโดย: % vim tmp zsh: suspended vim tmp % kill %1 % jobs [1] + suspended vim tmp % kill -SIGINT %1 % jobs [1] + suspended vim tmp % kill -INT %1 % jobs [1] + suspended vim tmp ดังนั้นฉันจึงลาออกเพื่อ "ทำเอง" และสงสัยว่าทำไมในภายหลัง: % fg [1] - continued vim tmp …

3
รอการใช้คำสั่งใน Linux หรือไม่
#!/bin/bash function back() { sleep $1 exit $2 } back $1 $2 & b=$! if `wait $!`;then echo success else echo failure fi bash-3.00# ./back 300 0 failure bash-3.00# ./back 300 1 failure ผมคาดหวังว่าsuccessเป็นสถานะออกเมื่อฉันส่ง 0 failureแต่ฉันยังคงได้รับ นอกจากนี้waitไม่ต้องรอเป็นเวลา 300 วินาที แต่ฉันได้รับข้อความทันที ฉันถือว่า$!เป็นลูกของ$$สคริปต์ ไม่ใช่เหรอ สามารถจับสถานะทางออกของการรอได้exit_status=$(wait $!)หรือไม่? if ! ((exit_status));then echo sucess else …

1
เริ่มกระบวนการพื้นหลังจากสคริปต์และจัดการเมื่อสคริปต์สิ้นสุด
ฉันต้องการเรียกใช้และกำหนดค่ากระบวนการคล้ายกับ daemon จากสคริปต์ shell ของฉันคือ zsh emulated ภายใต้ Cygwin และ daemon คือSFKซึ่งเป็นเซิร์ฟเวอร์ FTP พื้นฐาน สำหรับสิ่งที่สำคัญที่นี่สคริปต์startserv.shสามารถถูกร่างได้ดังนี้: #!/bin/sh read -s -p "Enter Password: " pw user=testuser share=/fshare cmd="sfk ftpserv -user=$user -pw=$pw -usedir $share=$share" $cmd & หลังจากเรียกใช้สคริปต์สคริปต์startserv.shจะหยุด (จบลง?) โดยไม่แสดงพรอมต์ใด ๆ จากนั้น: CTRL+ Cจบทั้งสคริปต์และกระบวนการทำงานเบื้องหลัง การกดปุ่มEnterสคริปต์จะสิ้นสุดกระบวนการจะยังคงอยู่ในพื้นหลัง อย่างไรก็ตามผมสามารถดูได้ผ่านทางpsและไม่ได้jobsดังนั้นเมื่อฉันต้องการที่จะปิดการที่ผมต้องส่งโหดร้ายkill -9สัญญาณซึ่งเป็นสิ่งที่ผมอยากจะหลีกเลี่ยงในความโปรดปรานของ +CTRLC ทางเลือกอื่น จะเรียกใช้สคริปต์ทั้งหมดในพื้นหลัง 'จะ' แต่คำสั่งไม่สามารถได้รับข้อมูลผู้ใช้ถ้าสคริปต์ทำงานเป็นreadstartserv.sh & โปรดทราบว่าฉันต้องการเซิร์ฟเวอร์ชั่วคราวไม่ใช่ภูตจริง: …

2
วิธีแบ็คกราวน์คำสั่ง?
cp a b && mv b c && rm aฉันต้องการที่จะพื้นหลังห่วงโซ่คำสั่งเช่น ฉันได้ลองทำแล้วcp a b && mv b c && rm a &แต่นี่เป็นเพียงกระบวนการขั้นตอนสุดท้ายเท่านั้น ฉันจะพื้นหลังห่วงโซ่คำสั่งได้อย่างไร

4
Ctrl-C พร้อมกับสองคำสั่งพร้อมกันในทุบตี
ฉันต้องการเรียกใช้สองคำสั่งพร้อมกันในทุบตีบนเครื่อง Linux ดังนั้นใน./execute.shทุบตีสคริปต์ของฉันฉันใส่: command 1 & command 2 echo "done" อย่างไรก็ตามเมื่อฉันต้องการหยุดสคริปต์ทุบตีและกดCtrl+ Cเฉพาะคำสั่งที่สองเท่านั้นที่หยุด คำสั่งแรกยังคงทำงานอยู่ ฉันจะแน่ใจได้อย่างไรว่าสคริปต์ทุบตีสมบูรณ์หยุดทำงาน หรือไม่ว่าในกรณีใดฉันจะหยุดคำสั่งทั้งสองได้อย่างไร เพราะในกรณีนี้ไม่ว่าฉันจะกดCtrl+ Cคำสั่งที่ทำงานต่อไปบ่อยแค่ไหนและฉันก็ถูกบังคับให้ปิดเทอร์มินัล


1
เรียกใช้ฟังก์ชันทุบตีหลายอย่างในพื้นหลังและรอจนกระทั่งพวกเขากลับมา
นี่เป็นสคริปต์อย่างง่ายที่รันnvidia-smiคำสั่งบนหลายโฮสต์และบันทึกเอาต์พุตไปยังไฟล์ทั่วไป เป้าหมายที่นี่คือการทำให้มันทำงานแบบไม่พร้อมกัน อยู่ใน&ตอนท้ายของprocess_host()ฟังก์ชั่นโทรเพียงพอ? สคริปต์ของฉันถูกต้องหรือไม่ #!/bin/bash HOSTS=(host1 host2 host3) OUTPUT_FILE=nvidia_smi.txt rm $OUTPUT_FILE process_host() { host=$1 echo "Processing" $host output=`ssh ${host} nvidia-smi` echo ${host} >> $OUTPUT_FILE echo "$output" >> $OUTPUT_FILE } for host in ${HOSTS[@]}; do process_host ${host} & done; wait cat $OUTPUT_FILE

4
รันคำสั่งเดียวกันหลาย ๆ ครั้งในพื้นหลัง
เป็นไปได้อย่างไรที่จะเรียกใช้หลายคำสั่งและใช้แบ็คกราวน์โดยใช้ bash? ตัวอย่างเช่น: $ for i in {1..10}; do wait file$i &; done โดยที่ wait เป็นไบนารีที่กำหนดเอง ตอนนี้ฉันได้รับข้อผิดพลาด: syntax error near unexpected token `;' เมื่อรันคำสั่งด้านบน เมื่อพื้นหลังคำสั่งควรทำงานในแบบคู่ขนาน

4
ให้สองคำสั่งพื้นหลังยุติหนึ่งที่เหลือเมื่อออกอย่างใดอย่างหนึ่ง
ฉันมีสคริปต์ทุบตีง่ายๆที่เริ่มต้นเซิร์ฟเวอร์สองเครื่อง: #!/bin/bash (cd ./frontend && gulp serve) & (cd ./backend && gulp serve --verbose) หากคำสั่งที่สองออกจากดูเหมือนว่าคำสั่งแรกยังคงทำงานอยู่ ฉันจะเปลี่ยนสิ่งนี้ได้อย่างไรหากคำสั่งใดคำสั่งหนึ่งจบลงคำสั่งอื่นจะถูกยกเลิก? โปรดทราบว่าเราไม่จำเป็นต้องตรวจสอบระดับข้อผิดพลาดของกระบวนการพื้นหลังไม่ว่าจะมีการออกจาก

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