Lệnh disown trong Linux giúp bạn tách một tiến trình đang chạy ở foreground ra khỏi shell hiện tại, cho phép nó tiếp tục chạy ngay cả khi bạn đóng terminal. Sử dụng lệnh disown rất hữu ích khi bạn muốn một chương trình chạy ngầm mà không bị ảnh hưởng bởi việc đăng xuất. Điều này giúp tránh việc tiến trình bị dừng đột ngột khi bạn đóng cửa sổ terminal hoặc kết thúc phiên làm việc.
Lệnh disown trong linux là gì?
Lệnh command disown in linux là một công cụ hữu ích giúp bạn tách một tiến trình đang chạy trên terminal ra khỏi shell hiện tại. Điều này có nghĩa là, khi bạn đóng terminal, tiến trình đó sẽ tiếp tục chạy ngầm mà không bị tắt. Sử dụng command disown in linux giúp bạn tránh việc vô tình dừng các tác vụ quan trọng khi đóng cửa sổ terminal. Nó đặc biệt hữu ích khi bạn muốn chạy các chương trình dài hạn như tải xuống, xử lý dữ liệu, hoặc chạy server. Hãy nhớ rằng, disown chỉ có tác dụng với các tiến trình đang chạy trong shell hiện tại.
Tìm hiểu Mục đích của Lệnh disown
Trong bước này, bạn sẽ tìm hiểu về mục đích của lệnh disown trong Linux.
Lệnh disown được dùng để tách một tiến trình đang chạy khỏi shell, cho phép nó tiếp tục chạy ngay cả khi phiên shell đã đóng.
Khi bạn bắt đầu một tiến trình ở foreground, nó sẽ liên kết với phiên shell hiện tại.
Nếu bạn đóng shell, tiến trình sẽ bị dừng, nhưng disown sẽ tách tiến trình khỏi shell.
Điều này cho phép tiến trình tiếp tục chạy ở background, ngay cả sau khi shell đã đóng.
Điều này hữu ích khi bạn cần chạy một tiến trình dài hạn, ví dụ như script backup hoặc web server.
Bạn có thể đảm bảo tiến trình tiếp tục chạy ngay cả khi bạn đăng xuất hoặc đóng terminal.
Hãy bắt đầu bằng cách chạy một tiến trình background đơn giản và dùng lệnh disown để tách nó.
## Start a background process that runs indefinitely
$ sleep 1000 &
[1] 12345
## Detach the process from the shell using the disown command
$ disown %1
Ví dụ đầu ra:
Trong ví dụ trên, ta bắt đầu một tiến trình background bằng lệnh sleep 1000 &.
Lệnh này sẽ chạy lệnh sleep ở background trong 1000 giây (khoảng 16 phút).
Tiếp theo, ta dùng lệnh disown %1 để tách tiến trình khỏi shell, với %1 là job number.
Bạn có thể tìm job number của tiến trình background bằng lệnh jobs.
Sau khi chạy lệnh disown, tiến trình sẽ tiếp tục chạy ở background.
Tiến trình vẫn chạy ngay cả khi bạn đăng xuất khỏi hệ thống hoặc đóng terminal.
Tách một tiến trình đang chạy ở chế độ nền
Trong bước này, bạn sẽ học cách tách một tiến trình đang chạy ở chế độ nền. Việc này cho phép nó tiếp tục thực thi ngay cả khi bạn đăng xuất hoặc đóng terminal.
Đầu tiên, hãy bắt đầu một tiến trình nền chạy vô thời hạn để thực hành thao tác disown.
## Start a background process that runs indefinitely
$ sleep 1000 &
[1] 12345
Bây giờ, hãy tách tiến trình đang chạy bằng lệnh disown đơn giản.
## Disown the running process
$ disown %1
Ví dụ về đầu ra:
Trong ví dụ trên, ta bắt đầu một tiến trình nền bằng lệnh sleep 1000 &.
Lệnh này sẽ chạy lệnh sleep trong nền trong 1000 giây (khoảng 16 phút).
Tiếp theo, ta sử dụng lệnh disown %1 để tách tiến trình khỏi shell hiện tại.
%1 đề cập đến số job của tiến trình nền, bạn có thể tìm thấy bằng lệnh jobs.
Sau khi chạy lệnh disown, tiến trình sẽ tiếp tục chạy trong nền một cách độc lập.
Điều này có nghĩa là nó vẫn chạy ngay cả khi bạn đăng xuất hoặc đóng terminal.
Để xác minh rằng tiến trình vẫn đang chạy, bạn có thể sử dụng lệnh ps.
## Check if the process is still running
$ ps -ef | grep 'sleep 1000'
labex 12345 12321 0 11:30 pts/0 00:00:00 sleep 1000
Như bạn thấy, tiến trình sleep 1000 vẫn đang chạy, ngay cả khi ta đã tách nó.
Hủy Liên Kết Nhiều Tiến Trình và Quản Lý Đầu Ra Của Chúng
Trong bước này, bạn sẽ học cách hủy liên kết nhiều tiến trình chạy ngầm và quản lý đầu ra của chúng.
Đầu tiên, hãy bắt đầu hai tiến trình chạy ngầm mà sẽ chạy vô thời hạn:
## Start two background processes
$ sleep 1000 &
[1] 12345
$ sleep 2000 &
[2] 12346
Bây giờ, hãy hủy liên kết cả hai tiến trình bằng lệnh disown:
## Disown the running processes
$ disown %1 %2
Ví dụ về đầu ra:
Trong ví dụ trên, chúng ta bắt đầu hai tiến trình ngầm bằng lệnh sleep 1000 & và sleep 2000 &.
Điều này sẽ chạy lệnh sleep ở chế độ nền trong 1000 và 2000 giây, tương ứng.
Tiếp theo, chúng ta sử dụng lệnh disown %1 %2 để tách cả hai tiến trình khỏi shell hiện tại.
%1 và %2 đề cập đến số job của các tiến trình chạy ngầm, bạn có thể tìm thấy bằng lệnh jobs.
Sau khi chạy lệnh disown, cả hai tiến trình sẽ tiếp tục chạy ngầm, ngay cả khi bạn đăng xuất hoặc đóng terminal.
Để quản lý đầu ra của các tiến trình đã hủy liên kết, bạn có thể chuyển hướng đầu ra của chúng vào một file:
## Start two background processes and redirect their output to files
$ sleep 1000 > process1.log 2>&1 &
[1] 12345
$ sleep 2000 > process2.log 2>&1 &
[2] 12346
## Disown the running processes
$ disown %1 %2
Trong ví dụ trên, chúng ta bắt đầu hai tiến trình ngầm và chuyển hướng đầu ra của chúng vào file process1.log và process2.log.
Sau đó, chúng ta sử dụng lệnh disown để tách các tiến trình khỏi shell.
Sau khi các tiến trình đã chạy xong, bạn có thể kiểm tra nội dung của các file log để xem đầu ra của chúng.
Kết luận cho linux disown command
Vậy là bạn đã nắm được cách sử dụng lệnh disown để tách một tiến trình khỏi shell rồi đấy! Giờ đây, bạn có thể thoải mái đóng terminal mà không lo lắng chương trình đang chạy bị tắt ngang. Hãy nhớ rằng, linux disown command chỉ có tác dụng với các tiến trình đang chạy trong shell hiện tại. Nếu bạn muốn một tiến trình chạy ngay cả khi khởi động lại máy, hãy cân nhắc sử dụng các công cụ như systemd hoặc nohup. Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về cách quản lý tiến trình trong Linux một cách hiệu quả. Thực hành thường xuyên sẽ giúp bạn làm quen và sử dụng thành thạo lệnh này. Chúc bạn thành công trên con đường khám phá Linux! Đừng ngần ngại tìm hiểu thêm các lệnh khác để làm chủ hệ thống của mình nhé.