Sự khác biệt giữa "công việc" và "quy trình" là gì?
Sự khác biệt giữa "công việc" và "quy trình" là gì?
Câu trả lời:
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.
ls | sort
là 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?
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 | head
là 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 SIGTTIN
và SIGTTOU
tí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.
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.
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.