Gửi một tiến trình tới nền Linux

Send Process Background Linux



Khi làm việc với môi trường máy tính để bàn đồ họa, chúng tôi hiếm khi lo lắng về các quy trình nền. Nếu chúng ta có một tiến trình đang chạy ở phía trước, chúng ta có thể nhanh chóng tạo ra một cửa sổ đầu cuối khác và tiếp tục công việc của mình.

Tuy nhiên, nếu bạn đang ở trong một trình bao đầu cuối thô chẳng hạn như SSH, bạn sẽ thường cảm thấy lo lắng về các quy trình chiếm và chặn trình bao cho đến khi chúng hoàn thành, đặc biệt là đối với các công việc chạy trong thời gian dài. Đó là nơi mà khái niệm về các quá trình nền và tiền cảnh phát huy tác dụng.







Hướng dẫn này sẽ thảo luận về quy trình nền và quy trình nền trước là gì, bao gồm cả việc tạo và quản lý chúng trong Linux.



Quy trình là gì?

Cho phép tôi bắt đầu ở cấp độ cơ bản: quy trình là gì?



Trong Linux, một tiến trình là một thể hiện của một chương trình. Thông thường, điều này có nghĩa là bất kỳ lệnh hoặc tệp thực thi nào trong một trình bao đều là một quá trình.





Chủ yếu có hai loại quy trình:

  • Quy trình tiền cảnh
  • Quy trình nền

Các quy trình nền trước chủ yếu là các ứng dụng điển hình mà chúng tôi khởi chạy và tương tác với chúng. Một ví dụ sẽ là trình quản lý tệp nautilus trong Gnome. Trong hầu hết các trường hợp, chúng ta có thể bắt đầu các quy trình nền trước từ shell hoặc môi trường máy tính để bàn.



Mặt khác, các quy trình nền chạy ở chế độ nền và không yêu cầu đầu vào hoặc tương tác từ người dùng. Một ví dụ sẽ là bất kỳ trình nền Linux điển hình nào.

Cách chạy một quy trình trong nền

Giả sử chúng ta có một tiến trình, trong khi chạy, chiếm phiên shell và cản trở chúng ta thực hiện các lệnh cho đến khi nó thoát.

Ví dụ: nếu chúng tôi chạy trình duyệt Firefox trong trình bao, nó sẽ chiếm phiên cho đến khi quá trình kết thúc.

$firefox


Như bạn có thể thấy, miễn là Firefox đang chạy, dấu nhắc trình bao sẽ không khả dụng và chúng tôi không thể thực hiện bất kỳ lệnh nào nữa.

Để giải quyết vấn đề này, chúng ta có thể làm theo hai cách:

1: Sử dụng Ký hiệu và (&)

Phương pháp đầu tiên là sử dụng dấu & &. Điều này yêu cầu trình bao chạy bất kỳ lệnh nào đứng trước dấu và trong nền.

Một ví dụ:

firefox&

Trong trường hợp như vậy, tiến trình thực thi ở chế độ nền và sinh ra dưới dạng một dấu nhắc trình bao mới cho phép chúng ta tiếp tục thực hiện các lệnh.

Nó cũng cung cấp hai số nhận dạng. Cái đầu tiên được đặt trong dấu ngoặc vuông là ID công việc, trong khi cái tiếp theo là ID quy trình.

2: Sử dụng CTRL + Z, lệnh bg.

Phương pháp tiếp theo bạn có thể sử dụng để đặt một tiến trình ở chế độ nền là sử dụng phím tắt CTRL + Z. Thao tác này sẽ ngăn quá trình chặn trình bao. Sau đó, bạn có thể sử dụng lệnh bg để đẩy nó xuống nền.

Ví dụ: bắt đầu bằng cách khởi chạy Firefox với tên:

$Firefox

Trong khi quá trình đang chạy, nhấn CTRL + Z. Thao tác này trả về lời nhắc trình bao của bạn. Cuối cùng, nhập lệnh bg để đẩy tiến trình ở chế độ nền.

Cách hiển thị các quy trình nền

Để xem và quản lý các quy trình trong nền, hãy sử dụng lệnh công việc trong trình bao. Điều đó sẽ hiển thị các công việc nền trong phiên đầu cuối hiện tại.

Ví dụ:

$việc làm

Một ví dụ đầu ra về các công việc nền:

Để đưa một quy trình đang chạy ở chế độ nền lên nền trước, hãy sử dụng lệnh fg theo sau là id công việc.

Ví dụ, để đưa công việc firefox ở phía trước, chúng tôi sử dụng lệnh:

$fg %1

Để đặt lại ở chế độ nền, nhấn CTRL + Z sau đó là lệnh bg.

Làm thế nào để thực hiện một quy trình bền bỉ sau khi vỏ chết

Khi bạn đang chạy các quy trình trong nền và phiên trình bao của bạn chết, tất cả các quy trình liên quan đến nó sẽ chấm dứt, điều này có thể có vấn đề, đặc biệt nếu đó là một phiên SSH.

Tuy nhiên, đây không phải là vấn đề quá lớn nếu bạn sử dụng bộ ghép kênh đầu cuối như tmux hoặc màn hình vì trong trường hợp đó, bạn có thể chỉ cần đính kèm lại phiên.

Tuy nhiên, nếu bạn chạy một phiên shell mà không có bộ ghép kênh, bạn có thể sử dụng lệnh nohup.

Lệnh nohup không bị treo máy và có thể bỏ qua tín hiệu SIGHUP được gửi đến một quy trình.

Do đó, nếu bạn chạy một lệnh với nohup, nó sẽ tiếp tục chạy ngay cả khi phiên trình bao vô tình chết.

Ví dụ, để chạy Firefox với nohup, hãy sử dụng lệnh:

nohupFirefox&

Điều này sẽ chạy quá trình trong nền khi một trình bao kết thúc.

Bạn có thể chạy một phiên đầu cuối mới và xem các công việc nền. Bạn sẽ thấy quá trình vẫn chạy trong nền.

Phần kết luận

Trong hướng dẫn này, chúng tôi đã thảo luận về các cách khác nhau để chạy và gửi các quy trình xuống nền trong Linux. Chúng tôi cũng đã đề cập đến cách đưa một quy trình nền vào nền và tiếp tục treo máy khi kết thúc trình bao.