Một quá trình dừng trong linux là gì?


12

Vì vậy, tôi đã có một số tập lệnh PHP chạy từ dòng lệnh và muốn ngăn chúng chạy.

Tôi đã chạy

$ ps aux | grep php
$ sudo kill 8754
$ sudo kill 8767

Và sau đó chạy

$ ps aux | grep php

một lần nữa để kiểm tra các quy trình đã kết thúc nhưng có loại đầu ra này:

jon      8754  0.4 53.5 3044256 2205204 ?     T    10:34   0:15 php awesome_script.php
jon      8767  0.4 53.5 3044256 2205204 ?     T    10:34   0:15 php awesome_script.php
jon     12275  0.0  0.0   4156   892 pts/1    S+   11:27   0:00 grep --color=auto php

Tôi đã tra cứu ý nghĩa của chữ T trong cột trạng thái và phát hiện ra rằng nó có nghĩa là Dừng lại, nhưng tôi không hiểu điều đó có nghĩa là quá trình đang làm gì.

Tôi biết bạn có thể tạo xử lý tín hiệu của riêng mình trong PHP, nhưng tôi đã không làm điều đó, vì vậy khi PHP nhận được tín hiệu SIGTERM thì nó làm gì?

Một quá trình dừng lại đang làm gì (nếu có gì)?

Câu trả lời:


15

Điều đó có nghĩa là quá trình đã nhận được STOPtín hiệu và sẽ không làm gì nhiều cho đến khi nhận được CONTtín hiệu, thậm chí không chấm dứt.

Nguồn STOPtín hiệu phổ biến nhất là người dùng nhấn ^ztrong khi quá trình ở phía trước và cách phổ biến để gửi CONTsau đó là gõ fghoặc bgtiếp tục quá trình ở nền trước và nền tương ứng.

Một cách khác để gửi STOPđến một quá trình là kill -STOP $pid. Tương tự, CONTcó thể được gửi đến một quá trình với kill -CONT $pid.

Vì bạn đã gửi TERMtín hiệu đến các quy trình, tôi giả sử bạn muốn chúng chấm dứt. Để điều đó xảy ra, các quá trình phải nhận được CONTtín hiệu. Bạn có thể gửi chúng bằng cách gõ kill -CONT 8754 8767vào cửa sổ terminal.


Việc gửi tín hiệu CONT sẽ cho phép tập lệnh chạy cho đến khi hoàn thành? Hay nó sẽ khiến kịch bản chấm dứt ngay lập tức?
Jon

Quá trình tiếp tục những gì nó đã làm (trước khi DỪNG) khi nhận được một LIÊN HỆ. kill $pidTuy nhiên, nếu bạn đã gửi một HẠN ( ví dụ) trong khi nó bị dừng, tuy nhiên, sau đó nó sẽ (phản hồi) phản hồi lại HẠN đó và chấm dứt.
Eroen

Hmm, vì vậy tôi đã gửi một HẠN bằng cách chạy kill 8754, điều này sẽ khiến quá trình cuối cùng chấm dứt phải không? Bạn có biết một quá trình sẽ diễn ra trong khi nó sắp hoàn thành? Cho rằng quá trình đã vào trạng thái STOP, như thể nó đã nhận được tín hiệu STOP từ đó kill -STOP 8754, điều đó cũng có thể xảy ra nếu nó được gửi tín hiệu HẠN?
Jon

Một quá trình dừng sẽ không chấm dứt do TERMtín hiệu cho đến khi nó được tiếp tục. Nó sẽ chấm dứt ngay lập tức nếu nhận được KILLtín hiệu, ngay cả khi dừng lại. Tôi giả sử một quá trình sẽ ở trạng thái Run khi nó kết thúc. Tôi không quen thuộc lắm với PHP và không biết làm thế nào để biết tại sao một quá trình dừng lại, xin lỗi. Nói chung, mặc dù, các quy trình không dừng lại mà chấm dứt khi chúng nhận được TERM.
Eroen

4

Quá trình dừng trong Linux / Unix là một quá trình / tác vụ nhận tín hiệu tạm dừng ( SIGSTOP/ SIGTSTP) cho biết kernel không thực hiện bất kỳ xử lý nào trên nó vì nó đã bị dừng và nó chỉ có thể tiếp tục thực hiện nếu nó được gửi SIGCONTtín hiệu.

Về cơ bản quá trình dừng chờ tín hiệu tiếp tục từ kernel, tương tự như quá trình bị treo đang chờ một điều kiện đánh thức từ kernel.

Quá trình xử lý nhân Linux: Sẵn sàng, Chạy, Dừng, Đình chỉ, Truy tìm, Zombie

Tín dụng hình ảnh: polytechnique.fr


Mỗi tiến trình trong nhân Linux được biểu diễn bằng task_structcấu trúc dữ liệu và mỗi taskvectơ bao gồm một mảng các con trỏ tới mọi task_struct. trong đó mô tả một quá trình hoặc công việc trong hệ thống (hoặc nó unrunnable, runnablehoặc stopped). Xem: Các quy trìnhcấu trúc dữ liệu Linux ) để biết thêm chi tiết.

Xem thêm: Hạt nhân Linux: Quản lý quy trình


@Jus Cảm ơn bạn đã báo cáo, tôi đã sửa nó.
kenorb
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.