Điểm:0

Chương trình C tạo nhiều tiến trình, đánh sập hệ điều hành và nhét 40GB vào thư mục log

lá cờ pl

Tôi tạo chương trình sau cần "chơi bóng bàn" giữa quy trình cha và quy trình con của nó.

Ngay cả khi đang làm việc với nó, trong khi biên dịch, tôi nhận thấy rằng PC của tôi bắt đầu hoạt động ngày càng nhiều hơn nhưng tôi không thực sự nghĩ đó là một vấn đề.

Cuối cùng, tôi thấy mình làm hỏng Linux của mình, tạo ra nhiều quy trình khác nhau làm chậm PC, đồng thời tạo ra nhiều tệp tạm thời/nhật ký và khiến đĩa của tôi chỉ còn 200 MB dung lượng trống thay vì 35 GB.

Làm thế nào tôi có thể khắc phục những vấn đề đó?

  1. Làm cách nào tôi có thể ngăn chương trình của mình tạo ra nhiều quy trình khác nhau?
  2. Làm cách nào để dọn sạch thư mục nhật ký của tôi? tôi đã thử sudo apt autoremovetự động làm sạch và xóa tất cả .gz tập tin trong /var/log danh mục.

Nhưng nó không giúp được gì. Dung lượng đĩa của tôi vẫn ở mức 200 MB miễn phí và /var/log thư mục gần 40GB vì một số lý do.

Tôi không muốn xóa các tệp cần thiết nằm trong /var/log vì vậy tôi không xóa toàn bộ thư mục.

Tại sao chương trình của tôi thậm chí đã tạo ra rất nhiều tệp tạm thời hoặc tệp nhật ký?

Cảm ơn.

is_parent_turn = 1;

void handle_siguser1(int signum);
void handle_siguser1(int signum);

int chính ()
{
    /* tạo tiến trình con */
    pid_t pid = fork();
    
    nếu (pid < 0)
        thoát(1);
    
    tín hiệu(SIGUSR1, handle_siguser1);
    tín hiệu(SIGUSR2, handle_siguser2);
    
    /* trả về tiến trình con mới tạo. */
    nếu (0 == pid)
    {   
        trong khi (1)
        {
            /* tạm dừng tiến trình con và để tiến trình cha bắt đầu */
            ngủ(2);
            
            giết (getppid(), SIGUSR2);
            
        }
    }
        
    /* trả về cha */
    khác
    {   
        trong khi (1)
        {
            giết (getpid(), SIGUSR1);
        }
    }
        
    trả về 0;   
}
/*************************************************** *******************************/
void handle_siguser1(int signum)
{
    nếu (is_parent_turn)
    {
        printf("\n\nPING\n\n");
        is_parent_turn = 0;
    }
    
    khác
    {
        ngủ(2);
    }
}
/*************************************************** *******************************/
void handle_siguser2(int signum)
{
    nếu (!is_parent_turn)
    {
        printf("\n\nPONG\n\n");
        is_parent_turn = 1;
    }
    
    khác
    {
        ngủ(2);
    }
}

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

lá cờ in
Bạn có thể đặt câu hỏi này trên StackOverflow, một trang web tập trung vào phát triển
NoobCoder avatar
lá cờ pl
@matigo câu hỏi chính ở đây là "làm cách nào để dọn sạch thư mục `var/log` và xóa tất cả các tệp do chương trình của tôi tạo và chiếm hơn 35 GB mà không xóa các tệp hệ thống thực sự quan trọng
lá cờ in
Bạn có thể sử dụng thiết bị đầu cuối hoặc Nautilus vào thư mục `/var/log/` và từ đó, xóa các tệp lớn. Miễn là bạn không xóa thư mục hoặc thay đổi quyền, bạn sẽ ổn thôi …
NoobCoder avatar
lá cờ pl
tệp có tên `syslog` là 22GB
Doug Smythies avatar
lá cờ gn
và một số mục trong `/var/log/syslog` là gì? Các mục sẽ giúp bạn gỡ lỗi chương trình của bạn.
Doug Smythies avatar
lá cờ gn
Chương trình c của bạn dường như không đầy đủ và không biên dịch như được liệt kê. Tôi đã biên dịch nó và nó không tạo bất kỳ mục nào trong `/var/log/syslog`, nhưng nó không lặp lại mãi mãi hoặc chấm dứt. Nó in "PING" rồi "PONG" một lần. Bạn nên tắt công cụ của mình `killall a.out`

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.