C程序关闭指定linux进程的方法

c语言里获取pid的函数 只有 getpid getppid,分别是获取自己的pid或父进程的pid。但不能获取其他指定名称的进程。
所以只能通过调取system执行系统命令,但是如果直接用pkill 命令有些系统可能不支持,并且可能会关不掉(比如正赶上该进程在sleep就会关不掉)。需要明确指定进程号才能确保真正关闭。


根据进程名称获取进程号的系统命令有 pgrep pidof,不过前者对于用脚本启动的进程无法直接获得,后者在有些系统不支持。此外ps 可以查看系统所有进程。

下面是3个命令各自的运行情况,可以看到pgrep  获得不了ntpswitch 的进程号,但是用 关键词“sh”可以获得。 

[root]$ps
  PID USER       VSZ STAT COMMAND
    1 root      2344 S    init
 8857 root      1956 S    /APP/ntpclient -s -t -h 114.118.7.161 -i 60 -l
 8859 root      2344 S    /bin/sh /APP/ntpswitch
18260 root      2348 S    -sh
[root]$pgrep ntpclient 
8857
[root]$pgrep ntpswitch 
[root]$pidof ntpswitch 
8859
[root]$pgrep sh
8859

下面示例采用的方法是popen获得 pidof 的打印信息,分析打印信息,再用kill函数关闭指定pid的进程。其中thrName是进程名。

void pidClose(void)
{
	unsigned int pidNum=0;
	FILE *cmdRst=NULL;
	char tempBuf[32]={0};

	cmdRst = popen("pidof thrName"r");
	if(cmdRst != NULL)
	{
		fgets(tempBuf, (32-1), cmdRst);
		pclose(cmdRst);
		
		pidNum = atoi(tempBuf);
		if(pidNum!=0) kill(pidNum, SIGKILL);
	}
}

另外也可以用系统命令“kill -9”替代kill函数,或者编写一个脚本,再用system调用这个脚本。关于脚本的编写可以看我的另一篇文章。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值