Sự khác biệt giữa một công việc và một quá trình là gì?


Câu trả lời:


46

Một quá trình là bất kỳ chương trình đang chạy với không gian địa chỉ riêng của nó.

Công việc là một khái niệm được sử dụng bởi trình bao - bất kỳ chương trình nào bạn khởi động tương tác mà không tách ra (nghĩa là không phải trình nền) là một công việc. Nếu bạn đang chạy một chương trình tương tác, bạn có thể nhấn CtrlZđể tạm dừng chương trình đó. Sau đó, bạn có thể bắt đầu nó trở lại trong nền trước (sử dụng fg) hoặc trong nền (sử dụng bg).

Trong khi chương trình bị treo hoặc chạy trong nền, bạn có thể bắt đầu một chương trình khác - sau đó bạn sẽ có hai công việc đang chạy. Bạn cũng có thể bắt đầu một chương trình đang chạy trong nền bằng cách nối thêm "&" như thế này : program &. Chương trình đó sẽ trở thành một công việc nền. Để liệt kê tất cả các công việc bạn đang chạy, bạn có thể sử dụng jobs.

Để biết thêm thông tin về công việc, xem phần này của trang bash man.


Trong ví dụ trên, khi chúng tôi có 2 công việc đang chạy, chúng tôi cũng có 2 quy trình đang chạy , phải không? Bạn có thể xây dựng ý nghĩa của không gian địa chỉ của riêng mình ? Trong trường hợp nào một chương trình không có không gian địa chỉ riêng?
Kenny

@Kenny vâng, những công việc tro đó cũng sẽ là quy trình. Trong thực tế, mỗi công việc là một quá trình. Một công việc có liên quan đến phiên của cô ấy. Mỗi quá trình bạn bắt đầu mà không tách rời khỏi tty của bạn là một công việc.
Shawn J. Goff

@Kenny, theo như các quy trình, khi tôi nói chương trình, đó là một điều rất chung chung - một bộ hướng dẫn được đặt hàng để CPU thực hiện. Điều này cũng được gọi là một nhiệm vụ hoặc một luồng thực hiện. Một quá trình có thể tạo ra một luồng khác chia sẻ không gian địa chỉ của nó.
Shawn J. Goff

1
Các lệnh đường ống như trong ls | sortlà một công việc, nhưng mỗi lệnh chạy như một tiến trình con của một quy trình con khác nhau. Đây là một ví dụ về một công việc bao gồm nhiều quy trình. Làm thế nào định nghĩa của bạn về một công việc có thể giải thích rằng một công việc có thể bao gồm nhiều quá trình?
Tim

30

UNIX có các khái niệm riêng biệt "quy trình", "nhóm quy trình" và "phiên".

Mỗi shell bạn nhận được khi đăng nhập sẽ trở thành người lãnh đạo của nhóm quy trình và phiên mới của riêng nó và đặt nhóm quy trình kiểm soát của thiết bị đầu cuối thành chính nó.

Shell tạo ra một nhóm quy trình trong phiên hiện tại cho mỗi "công việc" mà nó khởi chạy và đặt từng quy trình mà nó bắt đầu vào nhóm quy trình thích hợp. Ví dụ, ls | headlà một đường dẫn gồm hai quy trình, mà shell xem xét một công việc duy nhất và sẽ thuộc về một nhóm quy trình mới, duy nhất.

Một tiến trình là một (tập hợp) luồng thực hiện và bối cảnh khác, chẳng hạn như không gian địa chỉ và bảng mô tả tệp. Một quy trình có thể bắt đầu các quy trình khác; các quy trình mới này sẽ thuộc về cùng một nhóm quy trình với cha mẹ trừ khi thực hiện hành động khác. Mỗi quá trình cũng có thể có một "thiết bị đầu cuối kiểm soát", bắt đầu giống như cha mẹ của nó.

Shell có khái niệm về các công việc "tiền cảnh" và các công việc "nền". Công việc tiền cảnh là các nhóm quy trình có quyền kiểm soát thiết bị đầu cuối và công việc nền là nhóm quy trình mà không kiểm soát thiết bị đầu cuối.

Mỗi thiết bị đầu cuối có một nhóm quá trình tiền cảnh. Khi đưa một công việc lên nền trước, shell sẽ đặt nó làm nhóm quy trình tiền cảnh của thiết bị đầu cuối; khi đặt một công việc xuống nền, trình bao đặt nhóm quy trình tiền cảnh của thiết bị đầu cuối thành một nhóm quy trình khác hoặc chính nó.

Các quy trình có thể đọc và ghi vào thiết bị đầu cuối kiểm soát của chúng nếu chúng nằm trong nhóm quy trình nền trước. Nếu không, họ nhận được SIGTTINSIGTTOUtín hiệu về các nỗ lực để đọc và ghi vào thiết bị đầu cuối tương ứng. Theo mặc định, các tín hiệu này tạm dừng quá trình, mặc dù hầu hết các mặt nạ vỏ SIGTTOUđể công việc nền có thể ghi vào thiết bị đầu cuối không bị gián đoạn.


1
Đây là một tổng quan tốt, ngắn gọn về quản lý quy trình vỏ và thiết bị đầu cuối. Nó có thể được cải thiện bằng cách đề cập rằng một công việc của Cameron là một đường ống chính, có thể có nhiều hơn một quy trình được kết nối với nhau trong một nhóm quy trình.
Chris Trang

1

Trong điện toán, một Công việc là một đơn vị công việc hoặc đơn vị thực hiện (thực hiện công việc đã nói). Một thành phần của một công việc (như một đơn vị công việc) được gọi là một nhiệm vụ hoặc một bước (nếu tuần tự, như trong một chuỗi công việc). Là một đơn vị thực hiện, một công việc có thể được xác định cụ thể bằng một quy trình duy nhất, có thể lần lượt có các quy trình con (quy trình con; quy trình tương ứng với công việc là quy trình cha) thực hiện các nhiệm vụ hoặc các bước bao gồm công việc của việc làm; hoặc với một nhóm quy trình; hoặc với một tham chiếu trừu tượng đến một quy trình hoặc nhóm quy trình, như trong điều khiển công việc Unix.

Nguồn

ví dụ tốt đẹp


-1

Các định nghĩa trên là rất kỹ thuật nhưng có lẽ các op muốn làm rõ hơn từng ngày. Tôi nghĩ rằng một công việc là một quá trình theo lịch trình. Khi chúng ta xử lý các quy trình nói chung, không nhất thiết phải có khái niệm về lịch trình, nhưng khi chúng ta sử dụng từ "công việc", chúng ta luôn có nghĩa là nó được lên lịch hoặc lặp đi lặp lại như một vòng lặp, nó giống như một công nhân.


1
Vui lòng giải thích số phiếu giảm nếu bạn muốn bỏ phiếu. Nếu câu trả lời này không đúng thì ít nhất hãy giải thích tại sao bạn nghĩ nó không đúng. Cho đến bây giờ tôi vẫn nghĩ câu trả lời của mình có ý nghĩa, đó là loại giải thích mà tôi đang tìm kiếm.
eloone

Tôi đồng ý rằng người bỏ phiếu nên đã giải thích lý do tại sao. Nhưng tôi nghĩ lý do của downvote là định nghĩa về "công việc" của bạn đơn giản là không chính xác.
tiến vào

Quan tâm để giải thích tại sao nó không đúng? "Công việc" không được xác định rõ ràng như "quy trình" là gì (với PID trong hệ thống). Theo kinh nghiệm của tôi, "công việc" luôn là một từ được sử dụng để xác định một loại quy trình nhất định thường được lên lịch và trong nền và bạn có thể khởi chạy. Đó là lý do tại sao nó khó xác định bởi vì cách sử dụng định nghĩa nó. Nó cũng có thể là một nhóm các quy trình, nhưng "container" (LXC) cũng vậy, nhưng "container" không phải là "công việc". Một quy trình được đưa ra như "nginx" cũng không phải là "công việc". Nhận xét của tôi vẫn thêm sth vào câu trả lời. Một lần nữa, nó trả lời những gì tôi đã cố gắng để hiểu.
eloone

Tôi vẫn đang tìm kiếm một định nghĩa đúng, vì vậy tôi xin lỗi, tôi chưa thể trả lời (chưa). Nhưng những gì không chính xác, là nó sẽ phải được lên lịch.
tiên phong
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.