簡體   English   中英

如何使用 fork() 進程 ID 從 c 終止進程?

[英]How do I kill a process from c with fork() process id?

我正在構建一個功能,我可以在vi編輯器中打開和關閉文件。 我在 c 中使用execlp()系統調用在新的子進程中的新終端 window 中打開文件。 這是它的外觀: 打開文件

所以為了關閉文件,我有子進程 ID。

關閉文件

現在的挑戰是這個進程 id 與vi編輯器進程 id 不同。 殺死這個進程並不是關閉vi編輯器。 以下是流程。 25803是我在 pid 變量中的進程 ID,它是一個死進程。 要殺死vi編輯器,我需要25815進程 ID。 進程列表

殺死vi進程是如何工作的。 殺進程

這是我當前的程序 output,它不會關閉該文件的vi編輯器。 在此處輸入圖像描述

如何獲取給定進程的進程組 ID?

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
    int pid = 20989; // That PID has a PGID of 20988

    int pgid =  getpgid(pid);
    printf("pgid = %d\n", pgid);
}

或者,您可以使用此ps命令:

ps xao pid,ppid,pgid,sid,command will show 

為什么我應該避免使用 SIGKILL?

KILL 信號指示 Linux 立即結束作業。 任何打開的文件都會原地關閉。 應用程序沒有清理用戶區 state。

或者,發送 SIGTERM 指示應用程序結束。 允許應用程序關閉所有文件,保存它們的 state,並准備結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM