Tại sao hoạt động không được phép khi giết một quy trình không tồn tại và tại sao cần phải bị giết bằng sudo


0

Phiên bản Linux: CentOS 7

[weizhong@bja /tmp]
$ll apis_response_time_analysis.pid 
-rw-r--r-- 1 weizhong users 5 Jan 22 09:40 apis_response_time_analysis.pid

[weizhong@bja /tmp]
$cat apis_response_time_analysis.pid 
20795

[weizhong@bja /tmp]
$sudo ps -ef | grep 20795
weizhon+ 24876  9196  0 11:41 pts/2    00:00:00 grep --color=auto 20795

Tôi không thể tìm thấy PID, sau đó tôi đã cố gắng giết nó bằng tài khoản của mình. Tuy nhiên, nó đã sai Hoạt động không được phép thay vì Không có quá trình như vậy

[weizhong@bja /tmp]
$kill -9 20795
-bash: kill: (20795) - Operation not permitted

[weizhong@bja /tmp]
$kill -9 20795123   <--- a pid not exists
-bash: kill: (20795123) - No such process

sau đó tôi đã cố gắng để giết nó với sudo, tôi đã thực hiện

[weizhong@bja /tmp]
$sudo kill 20795    <-- no output

[weizhong@bja /tmp]
$sudo kill -9 20795
kill: sending signal to 20795 failed: No such process

Sau đó, tôi thực hiện lại bằng tài khoản của mình

[weizhong@bja /tmp]
$kill 20795
-bash: kill: (20795) - No such process

Tôi chắc chắn rằng pid 20795 được tạo bởi tài khoản của tôi. Hiện nay tôi không thể tìm thấy 20.795, nhưng khi tôi giết nó, trở lại Operation not permittedthay vì No such process, tôi muốn biết tại sao, và tại sao quá trình của tôi cần phải được giết bởi sudo


Trong Ubuntu ps -efđưa ra danh sách tương tự bất kể sudo. Có vẻ như PID 20795 miễn phí tại thời điểm bạn thực hiện grep, nhưng sau đó được phân bổ cho một quy trình khác. Hoặc nó có thể là ID luồng, nhưng tôi không biết killTIDs làm gì .
AFH

Câu trả lời:


1

Bạn không phải là chủ sở hữu của quá trình bạn đang cố gắng để giết. Đây là lý do cho cả hai psđầu ra - không liệt kê quy trình 20795 (xem câu trả lời @ kamil-maciorowski) - và sudoyêu cầu tiêu diệt 20795.

Bạn có thể sử dụng ps auxđể liệt kê tất cả các quy trình bao gồm cả những quy trình bạn không sở hữu. Bạn cũng có thể sử dụng -pđối số để hiển thị một quy trình cụ thể phù hợp nhất với nhu cầu của bạn:

ps -up 20795

Bạn sẽ thấy một cái gì đó như thế này:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
foo      20795  0.0  0.0  14728  1888 tty3     Ss+  12:03   0:00 bar

Tôi đoán là người dùng sẽ được root (đặc quyền nâng cao) hoặc có thể là một người dùng hệ thống cụ thể khác. Sau đó, bạn cần sudophải giết một quá trình bạn không sở hữu. Và bạn thành công để giết nó. Câu trả lời trống rỗng cho sudo kill 20795nó làm việc.


1

Lưu ý rằng bạn chỉ ps -ef | grep 20795trả lại grepchính nó - trận đấu là với dòng lệnh, không phải PID. Không có quá trình với PIDbạn chỉ định.

Tôi đoán là con số có thể không chính xác. Nó có thể khớp với ID luồng của người khác và theo cách này sudo killđã giết chết toàn bộ quá trình của người khác không phải là điều bạn muốn.

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.