หยุดโปรแกรมที่รันเป็นเวลานานในเทอร์มินัล


17

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


โปรแกรมอะไรกันแน่?
jobin

@Jobin โปรแกรมที่ฉันเขียนใน C ++ แต่ฉันไม่ต้องการเปลี่ยนรหัสต้นฉบับ
becko

คุณต้องการที่จะดำเนินการตามกระบวนการหลังจากรีบูตหรืออะไร?
jobin

@Jobin ไม่ฉันไม่ต้องการรีบูต ฉันต้องการทำงานต่อในภายหลัง แต่ฉันจะไม่รีบูตระบบตรงกลาง
becko

คำตอบ:


17

กด+ControlZ

สิ่งนี้จะระงับกระบวนการและนำคุณกลับสู่เชลล์ คุณสามารถทำสิ่งอื่น ๆ ตอนนี้ถ้าคุณต้องการหรือคุณสามารถกลับไปยังกระบวนการพื้นหลังโดยการป้อนตามมาด้วย%Return

โปรดทราบว่าหากคุณทำสิ่งนี้กับสิ่งที่ต้องตอบสนองคุณจะต้องเพิ่มระบบ แต่ถ้าเป็นเพียงnanoตัวอย่างเช่นทุกสิ่งควรจะโอเค


การหยุดกระบวนการเทอร์มินัลนั้นปลอดภัยหรือไม่?
Pandya

@Pandya: ทำไมไม่
jobin

@Pandya ฉันแน่ใจว่าขึ้นอยู่กับกระบวนการ ... หากบางสิ่งบางอย่างละเอียดอ่อนมากเวลาอาจไม่คาดว่าจะถูกระงับ แต่สิ่งที่ควรจะเป็นส่วนใหญ่
Oli

16

นี่คือการควบคุมงานทุบตี

ใช้CTL-Zเพื่อหยุดงาน

จากนั้นคุณสามารถพิมพ์bgเพื่อให้ทำงานในพื้นหลังหากมีเพียงงานที่ทำเท่านั้น

หากคุณมีมากกว่าหนึ่งคุณสามารถใช้งานเพื่อแสดงรายการและใช้fg% Nและbg% Nเพื่อเอฟเฟกต์ที่ต้องการ

ตัวอย่าง:

ubuntu @ ip-10-170-59-120: ~ $ find / usr -name "* .so"
/usr/lib/python2.7/dist-packages/OpenSSL/crypto.so
/usr/lib/python2.7/dist-packages/OpenSSL/SSL.so
/usr/lib/python2.7/dist-packages/OpenSSL/rand.so
/usr/lib/python2.7/dist-packages/gi/_glib/_glib.so
/usr/lib/python2.7/dist-packages/gi/_gobject/_gobject.so
/usr/lib/python2.7/dist-packages/gi/_gi.so
/usr/lib/python2.7/config/libpython2.7.so
...
^ Z
[1] + หยุด find / usr -name 

ubuntu @ ip-10-170-59-120: ~ $ jobs
[1] + หยุด find / usr -name "* .so"

ubuntu @ ip-10-170-59-120: ~ $ fg% 1
find / usr -name "* .so"
/usr/lib/php5/20090626+lfs/apc.so
/usr/lib/php5/20090626+lfs/memcache.so
/usr/lib/php5/20090626+lfs/mysql.so
...

สำหรับสิ่งอื่นไม่ยึดติดกับ TTY ที่คุณสามารถใช้SIGSTOP และ SIGCONT ตัวอย่างเช่นถ้าคุณคิดว่าภูตก่อให้เกิดปัญหา แต่คุณไม่รู้ว่ามันคืออะไรคุณสามารถส่ง pid SIGSTOP มันเหมือนกับการกดปุ่มหยุดชั่วคราวจากนั้นตรวจสอบการเปลี่ยนแปลงตกลงนั่นไม่ใช่และล้างและทำซ้ำจนกว่าคุณจะ ค้นหาปัญหา

หวังว่านี่จะช่วยได้


1
คำตอบที่ดี! ฉันขอเพิ่มได้ไหมว่ามันไม่ใช่แค่การทุบตีเท่านั้น Korn เชลล์ทำงานในลักษณะเดียวกัน
Sergiy Kolodyazhnyy

4

ฉันรู้ว่าคำตอบนี้ช้าไปหน่อย แต่คุณสามารถใช้ทางลัดCtrl+sเพื่อหยุดโปรแกรมของคุณ (ถ้าคุณต้องการอ่านผลลัพธ์หรืออะไรทำนองนี้) จากนั้นคุณสามารถใช้ทางลัดCtrl+qต่อไปได้

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