Lệnh setsid trong linux với các ví dụ dễ hiểu

Lệnh setsid trong Linux tạo ra một session mới, giúp chương trình chạy độc lập với terminal hiện tại. Nó tách tiến trình khỏi nhóm tiến trình hiện tại và trở thành leader của một session mới, không còn liên kết với terminal điều khiển. Điều này rất hữu ích khi bạn muốn chạy một ứng dụng nền mà không bị ảnh hưởng bởi việc đóng terminal.

Lệnh setsid trong linux là gì?

Lệnh command setsid in linux là một công cụ mạnh mẽ, cho phép bạn chạy một chương trình trong một session mới, tách biệt hoàn toàn khỏi session hiện tại. Điều này có nghĩa là chương trình sẽ không bị ảnh hưởng bởi việc đóng terminal hoặc các tín hiệu từ shell cha. Sử dụng setsid rất hữu ích khi bạn muốn chạy các tiến trình nền một cách độc lập và ổn định. Nó tạo ra một process group mới và biến tiến trình đó thành session leader, đảm bảo tính tự chủ cao. Hãy nhớ rằng, việc sử dụng setsid có thể ảnh hưởng đến cách chương trình tương tác với terminal, nên hãy cân nhắc kỹ trước khi dùng.

Tìm hiểu về Lệnh setsid

Trong bước này, chúng ta sẽ khám phá lệnh setsid trong Linux, dùng để tách tiến trình khỏi phiên hiện tại và chạy nó ở chế độ nền.

Lệnh setsid tạo một phiên mới với tiến trình gọi làm trưởng phiên. Điều này có nghĩa là tiến trình sẽ được cô lập khỏi phiên hiện tại.

Tiến trình sẽ không bị ảnh hưởng bởi tín hiệu hoặc đầu vào/đầu ra của terminal hiện tại. Hãy bắt đầu bằng cách chạy một lệnh đơn giản sử dụng setsid:

setsid sleep 60

Lệnh này sẽ chạy lệnh sleep 60 trong một phiên mới, và tiến trình sẽ tiếp tục chạy ngay cả khi bạn đóng terminal hiện tại.

Ví dụ về đầu ra:

[1] 1234

Đầu ra hiển thị ID tiến trình (PID) của lệnh sleep, tiến trình này đang chạy ở chế độ nền.

Bây giờ, hãy xác minh rằng tiến trình đang chạy trong một phiên riêng biệt:

ps -o sid,pid,cmd | grep sleep

Ví dụ về đầu ra:

  1234 1234 sleep 60

Lệnh ps cho thấy tiến trình sleep có ID phiên (SID) khác với phiên hiện tại.

Trong bước tiếp theo, chúng ta sẽ tìm hiểu cách sử dụng setsid để chạy các tiến trình nền hiệu quả hơn.

Tách một tiến trình khỏi phiên hiện tại

Trong bước này, chúng ta sẽ tìm hiểu cách tách một tiến trình khỏi phiên hiện tại bằng lệnh setsid.

Việc tách tiến trình khỏi phiên hiện tại rất hữu ích khi bạn muốn chạy một tiến trình dài hạn ở chế độ nền.

Điều này giúp tiến trình không bị ảnh hưởng bởi tín hiệu hoặc I/O của phiên hiện tại.

Hãy bắt đầu bằng cách chạy một lệnh đơn giản sử dụng setsid như sau:

setsid bash -c 'sleep 60 && echo "Process completed"'

Lệnh này sẽ chạy sleep 60 trong một phiên mới, tiếp tục chạy ngay cả khi bạn đóng terminal.

Lệnh echo "Process completed" sẽ được thực thi sau khi lệnh sleep hoàn thành.

Ví dụ về đầu ra:

[1] 1234

Đầu ra hiển thị ID tiến trình (PID) của lệnh sleep, đang chạy ở chế độ nền.

Bây giờ, hãy xác minh rằng tiến trình đang chạy trong một phiên riêng biệt:

ps -o sid,pid,cmd | grep sleep

Ví dụ về đầu ra:

  1234 1234 sleep 60

Lệnh ps cho thấy tiến trình sleep có ID phiên (SID) khác với phiên hiện tại.

Để kiểm tra đầu ra của tiến trình đã tách, dùng ps để tìm PID, sau đó dùng cat để đọc từ /proc/<PID>/fd/1.

File này đại diện cho stdout của tiến trình:

pid=$(ps -o pid,cmd | grep 'sleep 60' | awk '{print $1}')
cat /proc/$pid/fd/1

Ví dụ về đầu ra:

Process completed

Điều này cho thấy lệnh echo "Process completed" đã được thực thi sau khi lệnh sleep kết thúc.

Trong bước tiếp theo, chúng ta sẽ tìm hiểu cách chạy các tiến trình nền hiệu quả hơn bằng setsid.

Chạy Tiến Trình Nền với setsid

Trong bước cuối cùng này, chúng ta sẽ học cách sử dụng lệnh setsid để chạy các tiến trình nền hiệu quả trong Linux.

Một trường hợp sử dụng phổ biến của setsid là chạy các tiến trình dài hạn ở chế độ nền, không bị ảnh hưởng bởi phiên hiện tại.

Điều này đặc biệt hữu ích khi bạn cần chạy một tiến trình tiếp tục chạy ngay cả sau khi bạn đăng xuất khỏi hệ thống.

Hãy thử một ví dụ:

setsid bash -c 'while true; do echo "Running in the background" >> ~/project/output.txt; sleep 5; done'

Lệnh này sẽ khởi động một tiến trình nền ghi "Running in the background" vào file output.txt trong thư mục ~/project mỗi 5 giây.

Ví dụ đầu ra:

[1] 1234

Đầu ra hiển thị ID tiến trình (PID) của tiến trình nền đang chạy.

Bây giờ, hãy xác minh rằng tiến trình đang chạy trong một session riêng biệt và file đầu ra đang được tạo:

ps -o sid,pid,cmd | grep 'while true'
cat ~/project/output.txt

Ví dụ đầu ra:

  1234 1234 bash -c 'while true; do echo "Running in the background" >> ~/project/output.txt; sleep 5; done'
Running in the background
Running in the background
Running in the background

Lệnh ps cho thấy tiến trình đang chạy trong một session riêng, và lệnh cat hiển thị nội dung của file output.txt, được cập nhật liên tục bởi tiến trình nền.

Ngay cả khi bạn đóng terminal hiện tại, tiến trình nền sẽ tiếp tục chạy và cập nhật file output.txt. Bạn có thể kiểm tra file sau để xem đầu ra.

Trong lab này, chúng ta đã học cách sử dụng lệnh setsid để tách các tiến trình khỏi session hiện tại và chạy chúng ở chế độ nền.

Đây là một kỹ thuật hữu ích để quản lý các tiến trình dài hạn trong Linux.

Kết luận cho linux setsid command

Tóm lại, lệnh linux setsid command là một công cụ mạnh mẽ để tạo ra các tiến trình độc lập, không bị ảnh hưởng bởi tiến trình cha. Nó giúp bạn tách một tiến trình ra khỏi nhóm tiến trình hiện tại và tạo một session mới, đảm bảo tiến trình tiếp tục chạy ngay cả khi bạn đóng terminal. Hãy tưởng tượng bạn có một chương trình cần chạy nền liên tục, setsid chính là giải pháp hoàn hảo. Việc sử dụng setsid giúp chương trình của bạn trở nên ổn định và đáng tin cậy hơn rất nhiều. Hy vọng qua bài viết này, bạn đã hiểu rõ hơn về cách thức hoạt động và ứng dụng thực tế của lệnh này. Chúc bạn thành công trong việc sử dụng setsid để quản lý tiến trình trên hệ thống Linux của mình! Hãy thử nghiệm và khám phá thêm những khả năng mà nó mang lại nhé.

Last Updated : 17/10/2025