Chạy lệnh Bash trong nền đúng cách [Linux]
Mọi người đã ở đó: bạn đang tìm cách chạy một chương trình thiết bị đầu cuối và giữ nó chạy. Vấn đề là chương trình này là cũ hoặc không bao gồm một tính năng cho phép nó chạy như một daemon trong nền. May mắn thay, có một số cách để buộc các chương trình làm việc trong nền anyway.
Bash có thể tự làm tất cả điều này và các chương trình phụ sẽ không cần phải được cài đặt. Bài viết này sẽ đi qua một số cách mà bạn có thể đẩy các chương trình đầu cuối vào nền và giữ chúng ở đó. Mỗi phương pháp được liệt kê là tốt cho trường hợp sử dụng đặc biệt của riêng nó.
Kết thúc lệnh bằng &
Nếu bạn muốn đẩy một lệnh vào nền, sử dụng &
ở cuối là một cách dễ dàng để làm điều đó. Nó đi kèm với một bắt, mặc dù. Sử dụng &
không ngắt kết nối lệnh khỏi bạn; nó chỉ đẩy nó trong nền để bạn có thể tiếp tục sử dụng một thiết bị đầu cuối.
chỉ huy &
Khi phiên terminal được đóng lại, lệnh kết thúc. Sử dụng &
là tốt nếu bạn cần phải đẩy một cái gì đó ra cho một chút, nhưng không mong đợi nó sẽ tiếp tục mãi mãi.
& Sau khi một lệnh, sau đó Disown It
Chạy một lệnh với chỉ &
đẩy nó ra phía sau và giữ cho nó chạy miễn là cửa sổ terminal đang mở. Tuy nhiên, nếu bạn đang tìm cách giữ lệnh này chạy liên tục, ngay cả khi phiên cuối của bạn kết thúc, bạn có thể sử dụng lệnh disown
.
Để sử dụng phương pháp này, trước tiên hãy bắt đầu thêm một &
.
chỉ huy &
Như đã đề cập ở trên, sử dụng &
đẩy lệnh này vào nền nhưng không tách nó khỏi người dùng của bạn. Bạn có thể xác minh điều này bằng cách nhập jobs
vào thiết bị đầu cuối. Nó sẽ hiển thị lệnh chạy trong nền.
Chỉ cần gõ disown
vào shell, và nó sẽ làm điều đó (và bạn có thể một lần nữa xác minh điều này với lệnh jobs
).
& Sau lệnh bằng / dev / null
Thêm &
sau khi một lệnh sẽ đẩy một lệnh vào nền, nhưng kết quả là lệnh nền sẽ tiếp tục in tin nhắn vào thiết bị đầu cuối khi bạn đang sử dụng nó. Nếu bạn đang tìm cách ngăn chặn điều này, hãy xem xét chuyển hướng lệnh đến /dev/null
.
lệnh &> / dev / null &
Điều này không ngăn lệnh đóng khi terminal đóng. Tuy nhiên, như đã đề cập ở trên, có thể sử dụng lệnh disown
để xóa lệnh đang chạy khỏi người dùng.
Nohup, với & và / dev / null
Không giống như các lệnh trước, việc sử dụng nohup
cho phép bạn chạy một lệnh trong nền và giữ nó chạy. Làm sao? Nohup bỏ qua tín hiệu HUP (tín hiệu treo lên), làm cho nó có thể chạy các lệnh trong nền ngay cả khi thiết bị đầu cuối tắt. Kết hợp lệnh này với chuyển hướng đến /dev/null
(để ngăn chặn nohup tạo tệp nohup.out) và mọi thứ sẽ chuyển sang nền bằng một lệnh.
lệnh nohup &> / dev / null &
Phần kết luận
Hầu hết các chương trình đầu cuối trên Linux hiện nay đều có các tính năng được tích hợp sẵn để cho phép chúng chạy trong nền với ít nỗ lực. Cùng với đó, các hệ thống init hiện đại (như systemd) có thể cho phép người dùng bắt đầu các chương trình như dịch vụ lúc khởi động hoặc bất cứ khi nào.
Tuy nhiên, một số chương trình trên Linux thiếu khả năng chạy như một daemon hoặc tích hợp với các hệ thống init hiện đại. Đây là một sự bất tiện thực sự nhưng có thể hiểu được, vì không phải tất cả các nhà phát triển đều có kỹ năng hoặc thời gian để thêm vào các tính năng mới.
May mắn thay, các lệnh như nohup
hoặc disown
vẫn là một thực tế và vẫn có thể thu hẹp khoảng cách trong các chương trình chuyển động như thế này. Họ không hoàn hảo hay lạ mắt, nhưng họ hoàn thành công việc khi cần.
Làm thế nào để bạn di chuyển chạy các chương trình đầu cuối vào nền? Hãy cho chúng tôi biết dưới đây!
Tín dụng hình ảnh: Một thiết bị đầu cuối – bốn màn hình