Android

Làm thế nào để chạy các lệnh linux trong nền

[UNIX] Tìm hiểu user và group

[UNIX] Tìm hiểu user và group

Mục lục:

Anonim

Thông thường khi bạn chạy một lệnh trong thiết bị đầu cuối, bạn phải đợi cho đến khi lệnh kết thúc trước khi bạn có thể nhập một lệnh khác. Điều này được gọi là chạy lệnh trong quá trình tiền cảnh hoặc tiền cảnh. Khi một quá trình chạy ở nền trước, nó chiếm vỏ của bạn và bạn có thể tương tác với nó bằng các thiết bị đầu vào.

Điều gì xảy ra nếu lệnh mất nhiều thời gian để hoàn thành và bạn muốn chạy các lệnh khác trong lúc này? Bạn có một số lựa chọn theo ý của bạn. Tùy chọn rõ ràng và đơn giản nhất là bắt đầu một phiên shell mới và chạy lệnh trong đó. Một tùy chọn khác là chạy lệnh trong nền.

Một tiến trình nền là một tiến trình / lệnh được bắt đầu từ một thiết bị đầu cuối và chạy trong nền, không có sự tương tác từ người dùng., chúng ta sẽ nói về các quá trình nền là Linux. Chúng tôi sẽ chỉ cho bạn cách bắt đầu một lệnh trong nền và cách giữ cho quá trình chạy sau khi phiên shell được đóng lại.

Chạy một lệnh Linux trong nền

Để chạy lệnh trong nền, hãy thêm ký hiệu dấu và ( & ) ở cuối lệnh:

command &

ID công việc shell (được bao quanh bằng dấu ngoặc) và ID tiến trình sẽ được in trên thiết bị đầu cuối:

25177

Bạn có thể có nhiều tiến trình đang chạy trong nền cùng một lúc.

Quá trình nền sẽ tiếp tục viết tin nhắn đến thiết bị đầu cuối mà bạn đã gọi lệnh. Để loại bỏ các thông báo stdout và báo stderr sử dụng cú pháp sau:

command > /dev/null 2>&1 &

>/dev/null 2>&1 có nghĩa là chuyển hướng stdout sang /dev/null stdout .

Sử dụng tiện ích jobs để hiển thị trạng thái của tất cả các công việc đã dừng và nền trong phiên shell hiện tại:

jobs -l

Đầu ra bao gồm số công việc, ID tiến trình, trạng thái công việc và lệnh bắt đầu công việc:

+ 25177 Running ping google.com &

Để đưa quy trình nền lên nền trước, hãy sử dụng lệnh fg :

fg

fg %1

Để chấm dứt quá trình nền, sử dụng lệnh kill theo sau là ID tiến trình:

kill -9 25177

Di chuyển một quá trình tiền cảnh vào nền

Để di chuyển một quá trình tiền cảnh đang chạy trong nền:

  1. Dừng quá trình bằng cách nhập Ctrl+Z Di chuyển quá trình đã dừng sang nền bằng cách nhập bg .

Giữ các tiến trình nền chạy sau khi thoát khỏi Shell

Nếu kết nối của bạn giảm hoặc bạn đăng xuất khỏi phiên shell, các quy trình nền sẽ bị chấm dứt. Có một số cách để giữ cho quá trình chạy sau khi phiên shell tương tác kết thúc.

Một cách là loại bỏ công việc khỏi kiểm soát công việc của shell bằng cách sử dụng hàm dựng sẵn của shell:

disown

disown %1

Xác nhận rằng công việc được xóa khỏi bảng công việc đang hoạt động bằng cách sử dụng lệnh jobs -l . Để liệt kê tất cả các quy trình đang chạy, bao gồm cả việc từ chối sử dụng lệnh ps aux .

Một cách khác để giữ cho một quá trình chạy sau khi thoát shell là sử dụng nohup .

Lệnh nohup thực thi một chương trình khác được chỉ định làm đối số của nó và bỏ qua tất cả các SIGHUP (gác máy). SIGHUP là tín hiệu được gửi đến một quy trình khi thiết bị đầu cuối điều khiển của nó bị đóng.

Để chạy lệnh trong nền bằng lệnh nohup , gõ:

nohup command &

Đầu ra lệnh được chuyển hướng đến tệp nohup.out .

nohup: ignoring input and appending output to 'nohup.out'

Lựa chọn thay thế

Có một số chương trình cho phép bạn có nhiều phiên tương tác cùng một lúc.

Màn

Màn hình hoặc GNU Màn hình là một chương trình ghép kênh đầu cuối cho phép bạn bắt đầu một phiên màn hình và mở bất kỳ số lượng cửa sổ (thiết bị đầu cuối ảo) nào trong phiên đó. Các quy trình đang chạy trong Màn hình sẽ tiếp tục chạy khi cửa sổ của chúng không hiển thị ngay cả khi bạn bị ngắt kết nối.

Tmux

Tmux là một thay thế hiện đại cho màn hình GNU. Với Tmux, bạn cũng có thể tạo một phiên và mở nhiều cửa sổ bên trong phiên đó. Các phiên Tmux vẫn tồn tại, có nghĩa là các chương trình đang chạy trong Tmux tiếp tục chạy ngay cả khi bạn đóng thiết bị đầu cuối.

Phần kết luận

Để chạy một lệnh trong nền, bao gồm & ở cuối lệnh.

Khi bạn chạy một lệnh trong nền, bạn không phải đợi cho đến khi nó kết thúc trước khi bạn có thể thực thi một lệnh khác.

công việc không có fg bg thiết bị đầu cuối từ chối