Score:0

โปรแกรม C สร้างกระบวนการมากมาย ทำให้ OS พังและยัด 40GB ลงในไดเร็กทอรีบันทึก

ธง pl

ฉันสร้างโปรแกรมต่อไปนี้ซึ่งจำเป็นต้อง "เล่นปิงปอง" ระหว่างกระบวนการหลักและกระบวนการย่อย

แม้ในขณะที่ทำงาน ในขณะที่คอมไพล์ ฉันสังเกตเห็นว่าพีซีของฉันเริ่มทำงานหนักขึ้นเรื่อย ๆ แต่ฉันก็ไม่ได้คิดว่ามันเป็นปัญหา

ในที่สุดฉันพบว่าตัวเองทำให้ Linux ของฉันพัง สร้างกระบวนการต่างๆ มากมายที่ทำให้พีซีช้าลง และสร้างไฟล์ temp/logs จำนวนมาก และทำให้ดิสก์ของฉันมีพื้นที่ว่าง 200MB แทนที่จะเป็น 35GB

ฉันจะแก้ไขปัญหาเหล่านั้นได้อย่างไร?

  1. ฉันจะหยุดโปรแกรมไม่ให้สร้างกระบวนการต่างๆ มากมายได้อย่างไร
  2. ฉันจะล้างไดเร็กทอรีบันทึกของฉันได้อย่างไร ฉันเหนื่อย sudo apt ลบอัตโนมัติ และ ทำความสะอาดอัตโนมัติ และลบทั้งหมด .gz ไฟล์ใน /var/log ไดเรกทอรี

แต่มันไม่ได้ช่วย พื้นที่ว่างในดิสก์ของฉันยังคงมีพื้นที่ฟรี 200MB และ a /var/log ไดเรกทอรีเกือบ 40GB ด้วยเหตุผลบางประการ

ฉันไม่ต้องการลบไฟล์ที่จำเป็นที่อยู่ในไฟล์ /var/log ไดเร็กทอรี ดังนั้นฉันจะไม่ลบทั้งไดเร็กทอรี

เหตุใดโปรแกรมของฉันจึงสร้างไฟล์ temp หรือไฟล์บันทึกมากมาย

ขอบคุณ.

is_parent_turn = 1;

ถือเป็นโมฆะ handle_siguser1 (เครื่องหมาย int);
ถือเป็นโมฆะ handle_siguser1 (เครื่องหมาย int);

int หลัก ()
{
    /* สร้างโปรเซสลูก */
    pid_t pid = ส้อม ();
    
    ถ้า (pid < 0)
        ทางออก (1);
    
    สัญญาณ (SIGUSR1, handle_siguser1);
    สัญญาณ (SIGUSR2, handle_siguser2);
    
    /* กลับสู่กระบวนการลูกที่สร้างขึ้นใหม่ */
    ถ้า (0 == pid)
    {   
        ในขณะที่ (1)
        {
            /* หยุดกระบวนการลูกชั่วคราว และให้พาเรนต์เริ่มต้น */
            นอน (2);
            
            ฆ่า (getppid (), SIGUSR2);
            
        }
    }
        
    /* ส่งคืนพาเรนต์ */
    อื่น
    {   
        ในขณะที่ (1)
        {
            ฆ่า (getpid (), SIGUSR1);
        }
    }
        
    กลับ 0;   
}
/************************************************ *****************************/
ถือเป็นโมฆะ handle_siguser1 (int signum)
{
    ถ้า (is_parent_turn)
    {
        printf("\n\nปิง\n\n");
        is_parent_turn = 0;
    }
    
    อื่น
    {
        นอน (2);
    }
}
/************************************************ *****************************/
ถือเป็นโมฆะ handle_siguser2 (int signum)
{
    ถ้า (!is_parent_turn)
    {
        printf("\n\nพงษ์\n\n");
        is_parent_turn = 1;
    }
    
    อื่น
    {
        นอน (2);
    }
}

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

in flag
คุณอาจต้องการถามคำถามนี้ใน StackOverflow ซึ่งเป็นไซต์ที่เน้นการพัฒนาเป็นหลัก
NoobCoder avatar
pl flag
@matigo คำถามสำคัญที่นี่คือ "ฉันจะล้างไดเร็กทอรี `var/log` และลบไฟล์ทั้งหมดที่สร้างโดยโปรแกรมของฉันและใช้พื้นที่มากกว่า 35GB โดยไม่ลบไฟล์ระบบที่สำคัญจริงๆ ได้อย่างไร
in flag
คุณสามารถใช้เทอร์มินัลหรือ Nautilus เข้าไปในไดเร็กทอรี `/var/log/` จากนั้นลบไฟล์ขนาดใหญ่ ตราบใดที่คุณไม่ลบไดเร็กทอรีหรือเปลี่ยนการอนุญาต คุณจะไม่เป็นไร â¦
NoobCoder avatar
pl flag
ไฟล์ชื่อ `syslog` มีขนาด 22GB
Doug Smythies avatar
gn flag
และรายการใดบ้างใน `/var/log/syslog` รายการควรช่วยคุณดีบักโปรแกรมของคุณ
Doug Smythies avatar
gn flag
โปรแกรม c ของคุณดูเหมือนไม่สมบูรณ์และไม่ได้คอมไพล์ตามรายการ ฉันได้รวบรวมและไม่ได้สร้างรายการใด ๆ ใน `/var/log/syslog` แต่มันไม่ได้วนซ้ำตลอดไปหรือยุติ มันพิมพ์ "PING" แล้ว "PONG" หนึ่งครั้ง คุณควรฆ่าสิ่งของคุณ `killall a.out`

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา