การเริ่มต้นกระบวนการ linux ในพื้นหลัง


10

ฉันพยายามสร้างสคริปต์ที่เริ่มบางโปรแกรม

startup.sh

knetworkmanager
emesene
keepassx

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

คำตอบ:


16

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

nohup your-program >>/dev/null 2>>/dev/null &

ดูหน้าคนสำหรับ nohup และฆ่าสำหรับรายละเอียดเพิ่มเติมหรืออ่านบทความวิกิพีเดียเกี่ยวกับ nohup


อ่านอีกครั้งมันไม่ชัดเจนว่า OP จะออกจากการเรียกเชลล์หรือไม่ เขากล่าวถึงการออกจากสคริปต์เท่านั้นไม่ออกจากเชลล์หรือเทอร์มินัล
Adam Bellaire

อ่านคำตอบของฉันอีกครั้งคุณจะสังเกตเห็นว่าฉันพูดว่า "เมื่อเชลล์ที่รันสคริปต์ออก" สมมติว่าเชลล์นี้มีเทอร์มินัลเสมือนของตัวเอง (ไม่ใช่ subshell หรืออะไรบางอย่าง) สิ่งนี้ถูกต้อง
Kim

@ คิม: นั่นเป็นเรื่องจริง คำตอบของคุณดีฉันแน่ใจว่า OP กำลังปิดเชลล์การโทรหรือไม่
Adam Bellaire

10

&ไม่มีกระบวนการที่ไม่ควรจะถูกฆ่าตายเมื่อสคริปต์เสร็จสิ้นถ้าคุณใช้ ลองมัน.

knetworkmanager &
emesene &
keepassx &

2

ตามโปรแกรมตัวอย่างที่คุณให้มาดูเหมือนว่าคุณกำลังพยายามเริ่มบางโปรแกรมเมื่อ KDE เปิดตัว ถ้าอย่างนั้นให้ดูที่คุณสมบัติ Autostart ของ KDE บทความนี้อธิบายเพิ่มเติมและให้คำแนะนำเกี่ยวกับวิธีการเพิ่มโปรแกรมลงในเริ่มอัตโนมัติ


นั่นคือสิ่งที่ฉันพยายามจะทำ ฉันคงได้แล้วตอนนี้ขอบคุณ
Bart van Heukelom

1

ดังที่คนอื่น ๆ พูดใช้&โอเปอเรเตอร์เพื่อวางคำสั่งลงในพื้นหลังในเวลาที่เชลล์รัน

หากคุณต้องการให้ชิ้นส่วนของส่วนประกอบทำงานตามลำดับ (แทนที่จะชัดแจ้ง) แต่ยังต้องการให้พื้นหลังทั้งหมดทำงานให้ใช้ sub-shell ดังนี้:

(knetworkmanager; emesene; keepassx) &

หรือหากคุณต้องการให้การทำงานของแต่ละส่วนเป็นไปตามเงื่อนไขในการใช้งานส่วนก่อนหน้าให้สำเร็จ:

(knetworkmanager && emesene && keepassx) &

0

การเพิ่ม '&' หลังจากแต่ละคำสั่งจะทำงานได้อย่างแน่นอน หมายความว่าสคริปต์หรือโปรแกรมเหล่านั้นจะยังคงทำงานต่อไปหลังจากที่ startup.sh เสร็จสิ้น


0

ตัวเลือกอื่นจะเริ่มกระบวนการเป็น daemon โดยใช้ / sbin / start-stop-daemon

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