首页
社区
课程
招聘
Android孤儿进程防止清理
发表于: 2014-2-12 10:42 8048

Android孤儿进程防止清理

2014-2-12 10:42
8048
孤儿进程:因为父进程先退出而导致一个子进程被init进程收养的进程为孤儿进程。

因此,可以通过创建孤儿进程,改变native进程的父进程,达到防止系统清理。

关键代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
   pid_t child_pid;
   child_pid=fork();
   if(child_pid<0)
   {
     perror("fork error");
     exit(EXIT_FAILURE);
   }
   if(child_pid==0)//子进程处理 事务
   {
      while(1)
      {
         printf("hello world\n");
         sleep(1);
      }
      return 0;
   }else
   {
     printf("father bye byte\n");
     exit(EXIT_SUCCESS);
   }
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 29
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
这么做是将子进程转换成守护进程,你还得需要加上setsid函数,设置一下它的mask,也就3到4步左右。
2014-2-12 11:31
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
说的好可怜啊
2014-2-12 11:43
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
很多应用都在用daemon进程,猎豹、360
bionic中有damon方法可以直接用,
为了防止cwd占用导致部分文件系统卸载不掉,建议切换当前目录,即参数1传0
如果不使用标准输入输出,第二个参数也可以传0

#include <unistd.h>

int  daemon( int  nochdir, int  noclose )
{
   pid_t  pid;

   if ( !nochdir && chdir("/") != 0 )
       return -1;
   
   if ( !noclose )
   {
     int  fd = open("/dev/null", O_RDWR);

     if ( fd < 0 )
      return -1;

     if ( dup2( fd, 0 ) < 0 ||
          dup2( fd, 1 ) < 0 ||
          dup2( fd, 2 ) < 0 )
     {
       close(fd);
      return -1;
     }
     close(fd);
  }
  
   pid = fork();
   if (pid < 0)
    return -1;

   if (pid > 0)
    _exit(0);

   if ( setsid() < 0 )
     return -1;

   return 0;
}
2014-2-13 22:43
0
雪    币: 77
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
你是咖啡?
2014-2-14 13:10
0
雪    币: 5
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
都搞ANDBROID?
2014-2-14 13:28
0
游客
登录 | 注册 方可回帖
返回
//