我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 991|回复: 4

发一份linux 通过使用进程名就可以直接杀掉进程 的C 代码

[复制链接]

该用户从未签到

4

主题

37

回帖

1137

积分

二级逆天

积分
1137

终身成就奖特殊贡献奖

QQ
发表于 2018-3-12 18:04:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>


/*
struct dirent
{
long d_ino;
    off_t d_off;
    unsigned short d_reclen;
    unsigned char d_type;
    char d_name [NAME_MAX+1];
}
*/
char rild_pid[NAME_MAX+1];
int find_rild_flag=0;

#define READ_BUF_SIZE   2048

void  find_pid_by_name( char* pidName)
{
    DIR *dir;
    struct dirent *next;
    long* pidList=NULL;
    int i=0;

        ///proc中包括当前的进程信息,读取该目录
    dir = opendir("/proc");
    if (!dir)
        printf("Cannot open /proc");
     
        //遍历
    while ((next = readdir(dir)) != NULL) {
        FILE *status;
        char filename[READ_BUF_SIZE];
        char buffer[READ_BUF_SIZE];
        char name[READ_BUF_SIZE];

        /* Must skip ".." since that is outside /proc */
        if (strcmp(next->d_name, "..") == 0)
            continue;

        /* If it isn't a number, we don't want it */
        if (!isdigit(*next->d_name))
            continue;
                //设置进程
        sprintf(filename, "/proc/%s/status", next->d_name);
        if (! (status = fopen(filename, "r")) ) {
            continue;
        }
        if (fgets(buffer, READ_BUF_SIZE-1, status) == NULL) {
            fclose(status);
            continue;
        }
        fclose(status);

                //得到进程id
        /* Buffer should contain a string like "Name:   binary_name" */
        sscanf(buffer, "%*s %s", name);
        if (strcmp(name, pidName) == 0) {
#if 0            
            pidList=realloc( pidList, sizeof(long) * (i+2));
            pidList[i++]=strtol(next->d_name, NULL, 0);

#else
       memcpy(rild_pid,next->d_name,strlen(next->d_name));
       rild_pid[strlen(next->d_name)]='\0';
       find_rild_flag=1;
       printf("find the pid number for zytoge process  next->d_name=%s\n",next->d_name);        
       printf("find the pid number for zygote process  zygote_pid=%s\n",rild_pid);   

#endif

        }
    }

#if 0

    if (pidList) {
        pidList=0;
    }

#endif   
   
}





int main()
{


   
    int pid;
    int err;
      find_pid_by_name( "zygote");
    if( find_rild_flag)
    {

        printf("the original ZYGOTE process PID is = %s \n",rild_pid);
        pid = atoi(rild_pid);
        printf("pid =%d\n",pid);
             err = kill(pid, SIGKILL);
               if (err < 0)
           {
                    printf("KILL ZYGOTE  PROCESS FAILED BECAUSE could not kill pid: %d\n", pid);
            return 0;
              }

    }
    else
    {

        printf("KILL ZYGOTE PROCESS FAILED BECAUSE NO RILD PROCESS FIND\n");
        return 0;


    }
    printf("****************KILL ZYGOTE PROCESS SUCCESS *************\n");
    return 0;

}

代码中 以 android 系统 下的  "zygote” 进程 为例 , 若要杀掉其他进程 直接将 “zygote"  字符串改成要杀掉的进程 名即可 (执行时要有相应的权限)
嵌入式下编译:


arm-linux-gcc  filename.c  -static  -o  filename
运行:   chmod 777 filename
              ./filename
回复

使用道具 举报

  • TA的每日心情
    开心
    2024-9-7 09:00
  • 签到天数: 2 天

    [LV.1]初来乍到

    0

    主题

    4981

    回帖

    3456

    积分

    二级逆天

    积分
    3456

    终身成就奖社区居民优秀斑竹奖

    QQ
    发表于 2018-3-12 20:03:50 | 显示全部楼层
    谢谢分享linux 通过使用进程名就可以直接杀掉进程 的C 代码实现程序
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-29 20:33
  • 签到天数: 1 天

    [LV.1]初来乍到

    47

    主题

    6492

    回帖

    7755

    积分

    二级逆天

    积分
    7755

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2018-3-13 08:12:21 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-29 20:33
  • 签到天数: 1 天

    [LV.1]初来乍到

    47

    主题

    6492

    回帖

    7755

    积分

    二级逆天

    积分
    7755

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2018-3-13 08:12:30 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    2415

    回帖

    11

    积分

    二级逆天

    积分
    11

    社区居民终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2018-3-13 08:31:07 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表