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

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.


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.


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.


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

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.