Fork() là gì

Khi làm việc với Github, một cộng đồng chia sẻ source code lớn nhất thế giới hiện này, và vừa được mua bởi Microsoft với giá 7.5 tỷ USD. Các bạn sẽ bắt gặp khái niệm Fork. Hôm nay, vinasupport sẽ hướng dẫn các bạn về fork, khái niệm, các sử dụng fork trên Github.

Fork là gì?

Một fork là một bản copy của một repository [Kho chứa source code của bạn trên Github]. Việc fork một repository cho phép bạn dễ dàng chỉnh sửa, thay đổi source code mà không ảnh hưởng tới source gốc. 

Một ví dụ về việc sử dụng fork, là khi bạn muốn fix bug source code trên repository của một ai đó, khi đó bạn cần thực hiện theo quy trình sau:

  1. Fork repository đó về tài khoản Github của mình
  2. Thực hiện fix bug
  3. Gửi một Pull Request tới repository gốc

Khi chủ sở hữu của repository nơi bạn fork, sẽ review chỉnh sửa của bạn, và tiến hành merge nội dung chỉnh sửa vào source gốc. 

Hướng dẫn fork repository trên Github

Để fork một repository, các bạn thực hiện theo các bước sau đây.

Bước 1. Truy cập vào repository cần fork. Ở đây ví dụ mình fork repository của Laravel, một PHP phổ biến nhất hiện nay.

//github.com/laravel/laravel

Bước 2: Click vào button [ Fork ] ở góc phải màn hình

Quá trình fork sẽ được thực hiện.

Kết quả bạn đã fork thành công repository về tài khoản của mình.

Hướng dẫn hủy fork một repository trên Github

Để hủy một repository, các bạn phải xóa repository từ tài khoản của mình. Các bạn thực hiện theo các bước sau đây.

Hệ thống fork fork [] được sử dụng để tạo các tiến trình. Nó không có đối số và trả về một ID quá trình. Mục đích của fork [] là tạo ra một quy trình mới, trở thành quy trình con của người gọi. Sau khi một tiến trình con mới được tạo, cả hai tiến trình sẽ thực hiện lệnh tiếp theo sau lệnh gọi hệ thống fork []. Do đó, chúng ta phải phân biệt cha mẹ với đứa trẻ. Điều này có thể được thực hiện bằng cách kiểm tra giá trị trả về của fork []:

Nếu fork [] trả về giá trị âm, việc tạo một tiến trình con không thành công. fork [] trả về 0 cho tiến trình con mới được tạo. fork [] trả về giá trị dương, ID tiến trình của tiến trình con, cho cha mẹ. ID tiến trình được trả về là loại pid_t được xác định trong sys / type.h. Thông thường, ID tiến trình là một số nguyên. Hơn nữa, một quy trình có thể sử dụng hàm getpid [] để lấy ID tiến trình được gán cho quy trình này. Do đó, sau khi hệ thống gọi tới fork [], một thử nghiệm đơn giản có thể cho biết quá trình nào là con. Xin lưu ý rằng Unix sẽ tạo một bản sao chính xác của không gian địa chỉ của cha mẹ và đưa nó cho đứa trẻ. Do đó, các quá trình cha và con có không gian địa chỉ riêng biệt.

Hãy để chúng tôi hiểu nó với một ví dụ để làm rõ các điểm trên. Ví dụ này không phân biệt các quá trình cha và con.

#include  
#include  
#include  

#define   MAX_COUNT  200
#define   BUF_SIZE   100

void  main[void]
{
     pid_t  pid;
     int    i;
     char   buf[BUF_SIZE];

     fork[];
     pid = getpid[];
     for [i = 1; i 

Chủ Đề