คำถามติดแท็ก concurrency

4
วิธีการเปิดตัวชุดของโปรแกรมภายใน tmux หรือ gnome-terminal ภายในสคริปต์ได้อย่างไร
ฉันต้องการเรียกใช้คำสั่งสองสามคำพร้อมกันใน tmux หรือ gnome-terminal หรือ xfterminal ทุกแท็บที่ต่างกันโดยใช้คำสั่งเดียวและปิดแท็บนั้นเมื่อคำสั่งนั้นเสร็จสิ้น ยินดีต้อนรับซอฟต์แวร์อื่นใดเช่นกัน ฉันต้องการออกสคริปต์เดียวเพื่อทำงานเช่น XX "cmd1" "cmd2" "cmd3"

1
ไม่สามารถสร้างไฟล์ 'ชื่อไฟล์' ปกติ: มีไฟล์อยู่
ฉันได้รับข้อความแสดงข้อผิดพลาดแปลก ๆ นี้ในหนึ่งในบิลด์สคริปต์ของฉัน - cpไม่สำเร็จส่งคืนข้อผิดพลาด "ไฟล์มีอยู่" ฉันได้ลองใช้cp -fซึ่งควรเขียนทับไฟล์หากมีอยู่ แต่ข้อผิดพลาดยังคงปรากฏขึ้น การรันcpเพื่อเขียนทับไฟล์ที่มีอยู่นั้นทำงานได้อย่างสมบูรณ์แบบเมื่อฉันทำด้วยตนเอง สิ่งที่อาจทำให้เกิดข้อผิดพลาดนี้?
23 cp  concurrency 

1
กำลังใช้ rsync ในขณะที่แหล่งข้อมูลกำลังได้รับการอัปเดตอย่างปลอดภัยหรือไม่
มีความปลอดภัยในการใช้งานหรือไม่rsyncเมื่อระบบไฟล์ต้นทางถูกเมาต์และเขียนได้สมมติว่ามันอาจจะถูกแก้ไขได้อย่างดีในขณะที่ rsync กำลังทำงานอยู่? ฉันเข้าใจว่าภายใต้สภาพการแข่งขันฉันอาจไม่ได้รับการดัดแปลงล่าสุด แต่มีความเสี่ยงต่อการทุจริตหรือไม่?

3
tee + cat: ใช้เอาต์พุตหลายครั้งแล้วต่อผลลัพธ์ที่ต่อกัน
ถ้าผมเรียกคำสั่งบางอย่างเช่นechoฉันสามารถใช้ผลจากคำสั่งว่าในคำสั่งอื่น ๆ teeที่มีหลาย ตัวอย่าง: echo "Hello world!" | tee >(command1) >(command2) >(command3) ด้วย cat ฉันสามารถรวบรวมผลลัพธ์ของคำสั่งต่าง ๆ ได้ ตัวอย่าง: cat <(command1) <(command2) <(command3) ฉันต้องการที่จะสามารถทำทั้งสองสิ่งในเวลาเดียวกันเพื่อที่จะสามารถteeเรียกคำสั่งเหล่านั้นในผลลัพธ์ของสิ่งอื่น (ตัวอย่างเช่นที่echoฉันเขียน) แล้วรวบรวมผลลัพธ์ทั้งหมดของพวกเขาในผลลัพธ์เดียวด้วยcat. มันเป็นสิ่งสำคัญที่จะให้ผลในการสั่งซื้อที่นี้หมายถึงเส้นในการส่งออกของcommand1, command2และcommand3ไม่ควรพัน แต่ได้รับคำสั่งเป็นคำสั่งที่มี (ที่มันเกิดขึ้นกับcat) อาจจะมีตัวเลือกที่ดีกว่าcatและteeแต่ผู้ที่เป็นคนที่ฉันรู้เพื่อให้ห่างไกล ฉันต้องการหลีกเลี่ยงการใช้ไฟล์ชั่วคราวเนื่องจากขนาดของอินพุตและเอาต์พุตอาจมีขนาดใหญ่ ฉันจะทำสิ่งนี้ได้อย่างไร PD: ปัญหาอื่นคือสิ่งนี้เกิดขึ้นในลูปซึ่งทำให้การจัดการไฟล์ชั่วคราวหนักขึ้น นี่คือรหัสปัจจุบันที่ฉันมีและใช้งานได้กับ testcase เล็ก ๆ แต่มันสร้างลูปไม่สิ้นสุดเมื่ออ่านและเขียนจาก auxfile ด้วยวิธีที่ฉันไม่เข้าใจ somefunction() { if [ $1 -eq 1 ] then …
18 pipe  cat  tee  concurrency 

2
การสื่อสารระหว่างหลายกระบวนการ
ฉันมีสคริปต์ทุบตีซึ่งทำงานเป็นผู้จัดการ () ฟังก์ชั่นเป็นกระบวนการที่แยกต่างหากสำหรับ x- ครั้ง เป็นไปได้อย่างไรที่จะส่งต่อข้อความถึงกระบวนการทั้งหมด () จากผู้จัดการภายในสคริปต์? ฉันได้อ่านเกี่ยวกับไพพ์นิรนามแล้ว แต่ฉันไม่รู้ว่าจะแชร์ข้อความกับมันได้อย่างไรฉันลองทำมันด้วยชื่อไพพ์ แต่ดูเหมือนว่าฉันจะต้องสร้างไพพ์ที่มีชื่อแยกต่างหากสำหรับแต่ละกระบวนการ? วิธีที่สง่างามที่สุดในการทำเช่นนี้คืออะไร? นี่คือรหัสของฉัน: #!/bin/bash manager () { while : do echo "read what has been passed to \$line" done } x=1 while [ $x -le 5 ] do manager x & x=$(( $x + 1 )) done while : do …

4
วิธีการจัดสรรอุปกรณ์ลูปแบบอะตอม?
ฉันกำลังเขียนเชลล์สคริปต์บางตัวเพื่อจัดการกับอิมเมจดิสก์บางอย่างและฉันต้องใช้อุปกรณ์วนรอบเพื่อเข้าถึงอิมเมจดิสก์บางตัว อย่างไรก็ตามฉันไม่แน่ใจว่าจะจัดสรรอุปกรณ์ลูปอย่างถูกต้องโดยไม่เปิดเผยโปรแกรมของฉันให้อยู่ในสภาพการแข่งขันได้อย่างไร ฉันรู้ว่าฉันสามารถใช้losetup -fเพื่อรับอุปกรณ์ลูปที่ไม่ได้ถูกจัดสรรถัดไปจากนั้นจัดสรรอุปกรณ์ลูปนั้นดังนี้: ld=$(losetup -f) sudo losetup $ld myfile.img dostuffwith $ld อย่างไรก็ตามในกรณีที่ฉันต้องการเรียกใช้โปรแกรมหลายอินสแตนซ์ในเวลาเดียวกันนี่เป็นตัวอย่างหนังสือเรียนเกี่ยวกับสภาพการแข่งขันและนั่นทำให้ฉันรำคาญมาก หากฉันมีหลายอินสแตนซ์ของโปรแกรมนี้ทำงานอยู่หรือโปรแกรมอื่น ๆ ที่พยายามรับอุปกรณ์วนซ้ำแต่ละกระบวนการอาจไม่สามารถจัดสรรอุปกรณ์วนรอบก่อนการเรียกครั้งต่อไปlosetup -fซึ่งในกรณีนี้ทั้งสองกระบวนการคิดว่าการวนซ้ำเดียวกัน อุปกรณ์มีให้ แต่จะมีได้เพียงอันเดียวเท่านั้น ฉันสามารถใช้การซิงโครไนซ์ภายนอกสำหรับสิ่งนี้ แต่ฉันต้องการ (ถ้าเป็นไปได้) หลีกเลี่ยงความซับซ้อนเพิ่มเติม นอกจากนี้โปรแกรมอื่น ๆ ที่ใช้อุปกรณ์ลูปจะไม่เคารพการซิงโครไนซ์ใด ๆ ฉันจะหลีกเลี่ยงสภาพการแข่งขันที่เป็นไปได้นี้ได้อย่างไร โดยหลักการแล้วฉันต้องการค้นพบและผูกอุปกรณ์ลูปแบบอะตอมเช่นด้วยคำสั่งเช่น: ld=$(sudo losetup -f myfile.img) dostuffwith $ld อย่างไรก็ตามเมื่อฉันทำเช่นนั้น$ldไม่ได้รับการกำหนดเส้นทางอุปกรณ์ลูปและย้ายsudoออกในขณะที่sudo ld=$(losetup -f myfile.img)ให้ข้อผิดพลาดในการอนุญาต

1
การย้ายไฟล์ไปยังไฟล์ที่กำลังอ่าน
เมื่อไฟล์ถูกย้ายและไฟล์ปลายทางมีอยู่แล้วและกำลังอ่านอยู่การดำเนินการจะสำเร็จหรือไม่ มันจะขึ้นอยู่กับระยะเวลาที่การอ่านไฟล์ปลายทางนานเท่าไร?
10 io  concurrency 


2
วิธีทุบตีปฏิบัติต่อ“>> ()”
ขณะทำการทดลองกับการเปลี่ยนเส้นทางเอาต์พุตและการทดแทนกระบวนการฉันพบคำสั่งต่อไปนี้และผลลัพธ์ที่ได้: me @ elem: ~ $ echo foo>> (cat); แถบสะท้อนเสียง บาร์ me @ elem: ~ $ foo (ใช่แล้วบรรทัดใหม่ที่ว่างที่สุดจะเป็นเจตนา) ดังนั้นทุบบาร์ของ echo พิมพ์พรอมต์ตามปกติของฉัน, foo ของ echo, ขึ้นบรรทัดใหม่, และปล่อยเคอร์เซอร์ของฉันไว้ที่นั่น หากฉันกด Enter อีกครั้งจะพิมพ์พรอมต์ของฉันในบรรทัดใหม่และปล่อยเคอร์เซอร์ไว้ตาม (ตามที่คาดไว้เมื่อมีคนกด Enter บนบรรทัดคำสั่งว่าง) ฉันคาดหวังว่ามันจะเขียน foo ให้กับ file descriptor cat อ่านมันและ echo's foo แถบ echo echo ที่สองจากนั้นกลับไปที่ command prompt แต่นั่นไม่ใช่กรณีที่ชัดเจน ใครช่วยอธิบายหน่อยได้ว่าเกิดอะไรขึ้น?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.