Bagaimana menemukan proses yang masih berjalan di terminal?

12

Ketika saya mencoba untuk menutup tab di Terminal Gnome, dikatakan:

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 dalam output dari jobs. Terima kasih.

Tim
sumber
1
Jika Anda berada di prompt shell saat pesan ini ditampilkan, mungkin ini adalah shell yang bersarang (bukan yang langsung dijalankan oleh terminal emulator). Mungkin Anda sudah mulai screen, tmux, script, ssh, mcdan berbalik panel off, atau hanya shell lain dengan misalnya mengetik bash, atau sesuatu sepanjang garis-garis ini. Tekan Ctrl + D atau ketik exituntuk keluar dari shell Anda, Anda akan melihat di mana Anda berakhir.
egmont
Terima kasih. setelah itu exit, tab terminal gnome tidak menutup.
Tim
1
Sedetik exitmungkin akan menutupnya kemudian. @egmont dapatkah Anda memindahkan ini ke jawaban.
Videonauth

Jawaban:

12
ps T

Pilih semua proses yang terkait dengan terminal.

tmcp
sumber
Bagus, meski mungkin agak menipu. Proses yang muncul melalui nohupperintah terputus dari terminal, jadi jangan menghalangi penutupannya. Tetapi mereka masih terdaftar dengan perintah ini.
Sergiy Kolodyazhnyy
Atau hanya ps dalam hal ini
user10089632
1

Anda dapat mengambil puncak di proses yang daftar PID shell Anda sebagai orang tua. Karena Anda mungkin atau mungkin tidak tahu, kami dapat menentukan psformat

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

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

Sergiy Kolodyazhnyy
sumber
1

Jika Anda memulai beberapa proses di terminal (mis. Gedit) daripada ID Proses (PID) (dari bash) dan ID Proses Induk (PPID) (dari gedit) untuk kedua proses ini akan sama. Ini dapat dilihat pada output dari

ps -ef

perintah. Untuk membuatnya lebih mudah dibaca, pertama-tama "pipa" output untuk grepmenemukan PID dari semua "bash" proses yang sedang berjalan dan daripada "pipa" lagi awk. The awkmenyeleksi hanya PID dan bidang nama proses (field 2 dan 8) dan output 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 mungkin ada lebih dari satu jalur output jika Anda memiliki lebih dari satu terminal yang dibuka. Sekarang untuk menemukan proses "child" (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 menggantikan EnterPID dalam perintah terakhir. Jika ada lebih dari satu PID untuk "bash", Anda harus mencoba semuanya.

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

Info lebih lanjut:

man ps

pria awk

Model NonStandard
sumber
-1

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

Anda juga bisa menggunakan top.

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