Bagaimana saya bisa melanjutkan pekerjaan yang berhenti di Linux?

344

Bagaimana saya bisa melanjutkan pekerjaan yang berhenti di Linux? Saya menggunakan emacs dan tanpa sengaja menekan ctrl-z yang mengecam saya kembali ke konsol. Saya bisa melihatnya ketika saya mengetik 'pekerjaan'

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp
Polisi
sumber
Ini sebenarnya adalah alur kerja yang cukup normal untuk Vim, jika Anda ingin membuat Anda perintah dalam riwayat bash Anda, maka Anda menekan Ctrl-zketik perintah Anda dan kemudian melanjutkan. Jelas Anda dapat menjalankan perintah tanpa meninggalkan Vim melalui :!perintah ed
icc97

Jawaban:

383

Perintahnya fgadalah apa yang ingin Anda gunakan. Anda juga dapat memberikan nomor pekerjaan jika ada lebih dari satu pekerjaan yang dihentikan.

Ilkka
sumber
59
untuk referensi, fg adalah "foreground". Anda juga dapat melanjutkan pekerjaan di latar belakang dengan "bg".
Sirex
261

Perintah kontrol pekerjaan umum di Linux adalah:

  • pekerjaan - daftar pekerjaan saat ini
  • fg - melanjutkan pekerjaan yang berikutnya dalam antrian
  • fg% [angka] - melanjutkan pekerjaan [angka]
  • bg - Dorong pekerjaan berikutnya dalam antrian ke latar belakang
  • bg% [angka] - Dorong pekerjaan [angka] ke latar belakang
  • kill% [number] - Kill the job numbered [number]
  • bunuh - [sinyal]% [angka] - Kirim sinyal [sinyal] ke nomor pekerjaan [angka]
  • disown% [number] - menolak proses (tidak ada lagi terminal yang akan menjadi pemilik), jadi perintah akan tetap hidup bahkan setelah menutup terminal.

Itu hampir semuanya. Perhatikan% infront dari nomor pekerjaan dalam perintah - ini yang memberitahu Anda tidak berbicara tentang pekerjaan dan bukan proses.

Majenko
sumber
30
Saya menghindari "kill% 1" karena salah ketik sebagai "kill 1" benar-benar buruk :)
barrycarter
5
@ Barrycarter Itu sangat benar. Saya biasanya melakukan fgdan Ctrl-C;)
Majenko
6
@barry: Itulah sebabnya init di Upstart mengabaikan SIG {TERM, KILL} secara default.
Hello71
7
Dan, tentu saja, "tidak pernah berjalan sebagai root";)
barrycarter
47

Anda juga bisa mengetik %<process_name>; yaitu, Anda menekan Ctrl-Z di emacs, lalu Anda bisa mengetikkan %emacskonsol dan membawanya kembali ke latar depan.

NickD
sumber
Sangat baik untuk mengetahui
ZAD-Man
33

Hanya untuk menambah jawaban lainnya, bash memungkinkan Anda melewati fgjika Anda menentukan nomor pekerjaan.

Misalnya, ini setara dan melanjutkan pekerjaan terbaru:

%
%%
fg
fg %

Ini resume pekerjaan # 4:

%4
fg 4
grawity
sumber
2
Meskipun ini agak keren, saya masih merasa lebih mudah mengetik fgdaripada %.
rr-
3
%itu luar biasa, terima kasih! Sebagai pengetik sentuh, saya merasa fgsangat menjengkelkan (jari yang sama). Tapi kemudian, begitu juga cd.
Gauthier
Dan Anda dapat memulainya di latar belakang dengan salah satu bg %atau hanya % &.
Wildcard
dalam kasus saya ketika saya mencoba menggunakan fg saya melihat proses berhenti muncul dan menghilang dengan cepat dan hanya <fg%> berhasil mengembalikannya.
Lefi Tarik
20

Jika Anda tidak meluncurkannya dari terminal saat ini, gunakan ps aux | grep <process name>untuk menemukan nomor proses (pid), kemudian lanjutkan dengan:

kill -SIGCONT <pid>

(Terlepas dari namanya, killhanyalah alat untuk mengirim sinyal ke proses, memungkinkan proses untuk berkomunikasi satu sama lain. "Sinyal bunuh" hanyalah salah satu dari banyak sinyal standar.)

Kiat bonus: bungkus karakter pertama dari nama proses dengan []untuk mencegah grepperintah itu sendiri muncul di hasil. misalnya untuk menemukan emacsproses, gunakanps aux | grep [e]macs

mahemoff
sumber
2
Ini juga berfungsi jika Anda menolak proses yang terhenti
mabraham
dapatkah Anda juga mendapatkan akses ke input / output seperti yang terjadi ketika Anda mengatakannya fg?
Ciprian Tomoiagă
Ini adalah pendekatan yang jauh lebih fleksibel daripada bekerja dengan nomor pekerjaan. Jempolan.
thomp45793