Làm thế nào để tìm các tiến trình vẫn đang chạy trong một thiết bị đầu cuối?


12

Khi tôi cố gắng đóng một tab trong Gnome Terminal, nó báo:

Đóng thiết bị đầu cuối này? Vẫn còn một quá trình chạy trong thiết bị đầu cuối này. Đóng thiết bị đầu cuối sẽ giết nó.

Làm thế nào tôi có thể tìm ra những gì vẫn đang chạy? Lưu ý rằng không có gì trong đầu ra của jobs. Cảm ơn.


1
Nếu bạn đang ở dấu nhắc shell trong khi thông báo này được hiển thị, có thể đây là một shell được lồng (không phải là trình khởi động trực tiếp bởi trình giả lập thiết bị đầu cuối). Có lẽ bạn đã bắt đầu một screen, tmux, script, ssh, mcvà quay các tấm tắt, hoặc chỉ là một vỏ bằng ví dụ như gõ bash, hoặc một cái gì đó dọc theo những dòng này. Nhấn Ctrl + D hoặc gõ exitđể thoát khỏi vỏ của bạn, bạn sẽ thấy nơi bạn kết thúc.
egmont

Cảm ơn. Sau đó exit, tab thiết bị đầu cuối gnome không đóng.
Tim

1
Một giây exitcó lẽ sẽ đóng nó sau đó. @egmont bạn có thể di chuyển điều này đến một câu trả lời xin vui lòng.
Videonauth

Câu trả lời:


12
ps T

Chọn tất cả các quy trình liên quan đến thiết bị đầu cuối.


Tốt, mặc dù có thể là một chút lừa dối. Các quy trình được sinh ra thông qua nohuplệnh bị ngắt kết nối khỏi thiết bị đầu cuối, vì vậy đừng chặn đóng. Nhưng họ vẫn được liệt kê với lệnh này.
Sergiy Kolodyazhnyy

Hoặc chỉ cần ps cho vấn đề đó
user10089632

1

Bạn có thể đạt cực đại tại các quy trình liệt kê PID của shell của bạn là cha mẹ. Như bạn có thể biết hoặc không biết, chúng tôi có thể chỉ psđịnh định dạng

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

Dưới đây, chúng tôi nhận PID của shell từ biến đặc biệt $$vào SHELLPID, sau đó có thể được sử dụng bởi awk trong subshell ống của. Về cơ bản, chúng tôi chỉ liệt kê các quy trình dưới dạng NAME, PID, PID gốc và chỉ lọc ra những người có PID phù hợp trong cột cuối cùng.


1

Nếu bạn đã bắt đầu một số quy trình trong thiết bị đầu cuối (ví dụ: gedit) so với ID quy trình (PID) (của bash) và ID quy trình gốc (PPID) (của gedit) cho hai quy trình này sẽ giống nhau. Điều này có thể được nhìn thấy trong đầu ra của

ps -ef

chỉ huy. Để làm cho nó dễ đọc hơn, trước tiên hãy "ống" đầu ra để greptìm ra PID của tất cả các quá trình "bash" hiện đang chạy và hơn là "ống" một lần nữa awk. Chỉ awkchọn các trường tên PID và xử lý (trường 2 và 8) và xuất nó ra màn hình.

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

Số trong đầu ra là PID. Bạn sẽ sử dụng nó để tìm quá trình đã được bắt đầu trong thiết bị đầu cuối có PID đó. Lưu ý rằng có thể có nhiều hơn một dòng đầu ra nếu bạn có nhiều hơn một thiết bị đầu cuối được mở. Bây giờ để tìm các quy trình "con" (nếu có) của các phiên cuối đó, chúng ta có thể sử dụng lệnh này:

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

Bạn phải nhập số PID thay cho EnterPID trong lệnh cuối cùng. Nếu có nhiều hơn một PID cho "bash", bạn phải thử tất cả.

Lệnh cuối cùng chỉ xem kết quả đầu ra ps -efvà tìm kiếm nếu PID (mà bạn đã tìm thấy từ lệnh trước đó) và PPID giống nhau cho bất kỳ quy trình nào.

Thêm thông tin:

người đàn ông ps

người đàn ông


-1

Bạn có thể sử dụng htop. Trong Ubuntu 16.04 (và cao hơn), bạn có thể cài đặt nó chỉ bằng cách gõ sudo apt-get install htop.

Bạn cũng có thể sử dụng top.


Và làm thế nào bạn sẽ xác định các quy trình trong thiết bị đầu cuối hiện tại bằng cách sử dụng htop?
muru
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.