Pertanyaan Bagaimana menemukan proses yang masih berjalan di terminal?


Ketika saya mencoba menutup tab di Gnome Terminal, ia mengatakan:

Tutup terminal ini? Masih ada proses yang berjalan di terminal ini. Menutup terminal akan membunuhnya.

Bagaimana saya bisa mengetahui apa yang masih berjalan? Perhatikan bahwa tidak ada apa-apa dalam output jobs. Terima kasih.


9
2018-05-14 14:48


asal


Jika Anda berada di prompt shell saat pesan ini ditampilkan, mungkin ini adalah shell bersarang (bukan yang langsung dimulai oleh emulator terminal). Mungkin Anda sudah memulai screen, tmux, script, ssh, mc dan mematikan panel, atau hanya shell lain dengan mis. mengetik bash, atau sesuatu di sepanjang garis ini. Tekan Ctrl + D atau ketik exit untuk keluar dari cangkang, Anda akan melihat di mana Anda berakhir. - egmont
Terima kasih. setelah exit, tab terminal gnome tidak menutup. - Tim
Sebentar exitmungkin akan menutupnya. @egmont dapat Anda pindahkan ini ke jawaban, silakan. - Videonauth


Jawaban:


ps T

Memilih semua proses yang terkait dengan terminal.


10
2017-08-05 18:50



Bagus, meskipun mungkin sedikit menipu. Proses melahirkan melalui nohup perintah terputus dari terminal, jadi jangan halangi penutupannya. Tetapi mereka masih terdaftar dengan perintah ini. - Sergiy Kolodyazhnyy
Atau hanya ps dalam hal ini - user10089632


Jika Anda memulai beberapa proses dalam terminal (mis. Gedit) daripada ID Proses (PID) (bash) dan ID Proses Orang Tua (PPID) (dari gedit) untuk dua proses ini akan sama. Ini bisa dilihat pada output

ps -ef

perintah. Agar lebih mudah dibaca, pertama-tama mari kita "pipe" outputnya grep untuk menemukan PID dari semua proses "bash" yang sedang berjalan dan dari "pipe" lagi awk. Itu awk hanya memilih bidang nama PID dan proses (bidang 2 dan 8) dan menampilkannya ke layar.

ps -ef | grep bash | awk '{print $2 ": " $8}'

Angka dalam output adalah PID. Anda akan menggunakannya untuk menemukan proses apa yang dimulai di terminal yang memiliki PID itu. Perhatikan bahwa ada lebih dari satu baris output jika Anda memiliki lebih dari satu terminal yang dibuka. Sekarang untuk menemukan proses "turunan" (jika ada) dari sesi-terminal itu kita dapat menggunakan perintah ini:

ps -ef | awk '{if ($3 == EnterPID) print $2 ": " $8;}'

Anda harus memasukkan nomor PID sebagai pengganti EnterPID di perintah terakhir. Jika ada lebih dari satu PID untuk "bash" Anda harus mencoba semuanya.

Perintah terakhir hanya melihat output ps -ef dan mencari jika PID (yang Anda temukan dari perintah sebelumnya) dan PPID adalah sama untuk proses apa pun.

Info lebih lanjut:

man ps 

man awk


2
2018-05-14 18:11





Anda dapat mencapai puncak pada proses yang mencantumkan PID shell Anda sebagai induk. Seperti yang Anda mungkin atau mungkin tidak tahu, kami dapat menentukan ps format

SHELLPID=$$ ; ps -e  -o cmd,pid,ppid | awk -v shell=$SHELLPID  '$NF~shell'   

Di sini, kita mendapatkan PID shell dari variabel khusus $$ ke SHELLPID , yang kemudian dapat digunakan oleh awk dalam subkulit pipa. Pada dasarnya kami hanya mencantumkan proses dalam bentuk NAMA, PID, PID Orang Tua, dan memfilter hanya mereka yang memiliki PID yang sesuai di kolom terakhir.


1
2018-05-14 20:06





Kamu dapat memakai htop. Di Ubuntu 16.04 (dan lebih tinggi), Anda dapat menginstalnya hanya dengan mengetik sudo apt-get install htop.

Anda juga bisa menggunakan top .


-1
2017-10-13 02:41



Dan bagaimana Anda mengidentifikasi proses di terminal saat ini menggunakan htop? - muru