昨天和今天实验了向Android中添加一个守护进程,鼓捣了2天,小有点收获,自己编写的进程添加进这两个操作系统的开机启动中了。但离完全成功似乎还有些距离。另外今天还看了下解压、修改Android的ramdisk.img的方法。
先把我的守护进程(daemon09.c)发到这里
/************************程序开始**************************/
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/time.h>
#include<sys/resource.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main()
{
int i=0,fd;
pid_t pid;
struct rlimit rl;
char str[]="Writing Test is going.../n";
umask(0);
if(getrlimit(RLIMIT_NOFILE,&rl)<0)
printf("getrlimit函数调用出现错误!/n");
if((pid=fork())<0)
{
printf("fork出现错误!/n");
exit(1);
}
else if(pid>0)//父进程退出
{
printf("父进程退出,它的ID为%d,它的子进程ID为%d/n",getpid(),pid);
exit(0);
}
//子进程
sleep(2);
printf("子进程ID为%d/n",getpid());
setsid();
if((pid=fork())<0)
{
printf("fork出现错误!/n");
return -1;
}
else if(pid>0)//第一个子进程退出
{
printf("第一个子进程退出,它的ID为%d,它的子进程ID为%d/n",getpid(),pid); /*这个printf的内容可以被输出,貌似是因为它所在的进程虽然失去了终端,但它是一个会话组的首进程,因此看到有printf后,自己又申请了一个终端?*/
exit(0);
}
//第二个子进程
printf("不会输出这一行。/n");/*这个printf的内容将不会在屏幕上输出,原因可能是因为它所在的进程此时已经不是一个会话组的首进程,无法重新申请获得终端?*/
chdir("/");
if(rl.rlim_max==RLIM_INFINITY)
rl.rlim_max=1024;
printf("%d",(int)rl.rlim_max);
for(i=0;i<rl.rlim_max;i++)
close(i);
open("/dev/null",O_RDWR);
dup(0);
dup(0);
//每隔5s向文件内写入一次数据
while(1)
{
fd=open("/data/deamon.txt",O_WRONLY|O_CREAT|O_APPEND,0766);/*这里的/data指的是android系统上的/data目录*/
write(fd,str,sizeof(str));
sleep(5);
}
close(fd);
exit(0);
}
/************************程序结束**************************/
因为andorid也是基于LINUX内核的,因此我想一开始先试验一下是否可以把这个进程在Ubuntu中开机自启动。
通过在/etc/rc.local文件中加入了一行“/usr/myfiles/test/daemon09”,成功让daemon09在Ubuntu开机时启动了。(注意,这里在LINUX下启动的话,上面的C程序中红字部分可能需要改变一下,因为Ubuntu下没有/data这样一个路径)
在Ubuntu Linux下成功之后,就转而看看在android下是否能行。android启动后的根目录下的init.rc似乎是管这个的(源码目录/system/core/rootdir/init.rc,make后就是它),于是我试着对源文件做修改再make运行,但一开始总是不得要领,不知道init.rc中的语法是什么。后来在google论坛上找了下,原来init.rc的内容在“android源码路径/system/core/init/readme.txt“内有说明。于是根据那个搞了几个小时(没办法,本人是菜鸟),基本上弄出来了,android模拟器启动后,自己写的进程也成功加入了。方法如下:
在init.rc的那一堆以service开头的语句中插入一段新的service语句。格式如下:
#my_deamon_test是服务名称,后面跟的是你编写的要开机启动的程序及路径,这里的路径是android系统中的路径
service my_deamon_test /data/deamon_test
oneshot(不加这一句似乎不行,少了它可能你的程序启动不起来)
oneshot选项的含义(在android源码路径/system/core/init/readme.txt内有说明):
Do not restart the service when it exits.
===============================
另外,这两天在网上看了一些android下的调试技巧,贴到这里备忘
1、解压、修改Android的ramdisk.img的方法
将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令
gunzip ramdisk.img.gz
然后新建一个文件夹,叫ramdisk吧,进入,输入命令
cpio -i -F ../ramdisk.img
这下,你就能看见并操作ramdisk里面的内容了。
根据自己的需要对里面的内容修改之后,可以使用下列命令重新打包成镜像
cpio -i -t -F ../ramdisk.img > list
cpio -o -H newc -O lk.img < list
当前目录下生成的lk.img就是我们的新镜像了。
相关推荐
手把手教你用安卓手机+Termux实现远程开机(Wake on Lan)与内网服务访问,告别公网IP焦虑
本文详细介绍了如何利用安卓手机和Termux实现远程开机(Wake on Lan)与内网服务访问,无需公网IP。通过配置Termux、Frp内网穿透工具和Ubuntu子系统,用户可以轻松唤醒家中设备并访问内网服务,解决网络限制问题。
Ubuntu添加和设置开机自动启动程序的方法
Ubuntu添加和设置开机自动启动程序的方法 1、Ubuntu添加开机自动启动程序的方法ubuntu 1. 开机启动时自动运行程序 Linux加载后, 它将初始化硬件和设备驱动, 而后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。一般状况下,修改放置在网络 /etc/rc或app /etc/rc.d 或ide /etc/rc?.dpost 目录下的脚本文件,可使init自动启动其它程序。例如:编辑/etc/rc.d/rc.local 文件(该文件一般是系统最后启动的脚本),在文件最
在安卓手机Termux中安装完整Ubuntu Linux环境:从配置到实战
Linux容器技术通过在用户空间模拟完整的操作系统环境,实现了资源隔离与便携部署。其核心原理基于PRoot等工具,利用系统调用拦截和路径重定向,在非特权环境下构建独立的根文件系统。这项技术的价值在于为移动设备和资源受限场景提供了轻量级的Linux体验,极大降低了学习与实验的门槛。在应用场景上,它广泛适用于编程学习、服务部署、运维练习以及旧设备再利用。本文聚焦于通过Termux和proot-distro工具,在安卓手机上安装完整的Ubuntu发行版,并配置开发环境,解决息屏断连等常见问题,实现旧手机的‘第二春
ubuntu开启守护进程,运行后台php服务(开机启动)
场景: 创建一个php服务脚本,该脚本负责抓取mqtt等通信记录,并且保存到数据库。平时,我们只要在服务器端开个终端,就可以运行代码,去抓数据,但是将终端关闭后,就无法抓取数据了。守护进程(daemon)就是一直在后台运行的进程(daemon)。他可以脱离终端独自在后台运行。 前台任务和后台任务 1.在ubuntu上,平时的做法是运行如下代码当做一个服务脚本。 php ru...
ReDroid 13.0.0 多实例部署:Ubuntu 22.04 单机运行 3 个安卓容器资源分配指南
本文详细介绍了在Ubuntu 22.04系统上部署ReDroid 13.0.0多实例的完整指南,包括资源分配、网络隔离和性能优化。通过Docker Compose配置实现3个安卓容器的精细化管理,适用于云手机、自动化测试等场景,提升资源利用率和运维效率。
自启动和进程守护
开机自启动+JNI进程守护,参考 http://coolerfall.com/android/android-app-daemon/ https://github.com/Coolerfall/Android-AppDaemon
AutoDL使用screen守护进程的方法【Pycharm】
建议先自己测试一遍,再对实际需要运行的文件进行操作。
解密CANoe数据回放:从BLF到ASC的格式转换与优化策略
本文深入解析CANoe数据回放中BLF与ASC格式的转换与优化策略,帮助工程师高效处理汽车电子测试数据。详细介绍了两种格式的特性、转换方法及性能优化技巧,包括CANoe内置功能、命令行自动化和第三方工具应用,提升故障诊断和系统验证效率。
当我在AutoDL(SSH)跑模型时,如何用screen来守护进程,防止因断网导致程序终止
今天跑了一下午的模型,临时把Laptop带去会议室,忘记连着SSH的模型还在跑,结果回来发现pycharm终端没了,晕。记录一下在终端调train.py时,成功让我可以开始训练后,切换网络/断网/把电脑拿走后,再恢复进程,不会中断SSH连接~
遥感影像分割实战:LoveDA数据集从下载到训练全流程指南(附避坑技巧)
本文以LoveDA数据集为例,提供了一份详尽的遥感影像语义分割实战指南。内容涵盖从数据下载、理解与预处理,到环境配置、模型选择与训练,再到性能调优与部署的全流程,并重点分享了多个关键环节的避坑技巧,旨在帮助开发者和研究者高效上手并解决实际问题。
VSCode搭配Keil开发STM32:从环境配置到代码跳转全流程(避坑指南)
本文详细介绍了如何使用VSCode搭配Keil进行STM32开发,从环境配置到代码跳转的全流程指南。通过安装必备插件和正确配置项目文件,开发者可以在VSCode中享受现代编辑器的便捷功能,同时保留Keil的编译调试能力,提升嵌入式开发效率。
【09.03.24】在Ubuntu中和Android中添加开机自启动的守护进程
昨天和今天实验了向Android中添加一个守护进程,鼓捣了2天,小有点收获,自己编写的进程添加进这两个操作系统的开机启动中了。但离完全成功似乎还有些距离。另外今天还看了下解压、修改Android的ramdisk.img的方法。 先把我的守护进程(daemon09.c)发到这里 /************************程序开始**************************
手把手教你学Simulink——基于Simulink的滑模控制器车辆稳定性仿真建模示例
本文详细介绍了基于Simulink的滑模控制器在车辆稳定性控制中的应用。通过建立二自由度车辆动力学模型(含魔术公式轮胎),设计横摆角速度与质心侧偏角滑模控制器,在Simulink中实现直接横摆力矩控制。文章包含完整的建模流程:从参考模型设计、滑模控制器推导(含等效控制和边界层法),到MATLAB参数设定和Simulink模块搭建。通过双移线测试和路面突变场景验证,证明该控制器能在低附着路面(μ=0.3)将横摆角速度误差控制在±5%以内,显著提升车辆稳定性。同时提供了工程实践要点和扩展方向(如高阶滑模、自适应
在linux中运行安卓程序
出于需求,我需要一台安卓模拟器。我选择使用Android Studio中的模拟器。 接着,我安装Android Studio,在其中创建虚拟设备,在虚拟设备中安装安卓程序。 最后,为操作方便,我使用命令行启动模拟器。zsh则帮我记住这条命令。 以后,我想打开这个模拟器,一行命令即可。
三维重建/SLAM笔记_最佳学习路线/攻略
本文目的 学习三维重建,需要不少知识,而知识之间又存在不同的依赖关系,为了后来人能少走弯路,也为了对自己的知识框架系统总结,特记录自己的学习路线。 学习心得 关于读书,了解基础知识是一方面,产生疑问也是一方面,为以后知道学习什么留下印象; 一回生,二回熟,看不懂时,大多是因为先验知识不够,没关系,多查多想,总会搞懂的。 学习路线 1.计算机图形学基础(OpenGL基础版)(徐文鹏 清...
Claude Code 从入门到精通,通过实战项目穿插 Agent Skills、MCP、Hooks、子代理、插件等十五个知识点
本文介绍了Claude Code的高级使用技巧,通过一个个人简历网站实战项目,详细讲解了15个核心知识点。主要内容包括:三种权限模式(默认/编辑/计划)的使用与切换;历史会话管理(/resume、/rename、/clear命令);会话回滚功能(/rewind);以及危险参数--dangerously-skip-permissions的注意事项。文章还演示了如何通过计划模式拆分代码文件,并强调了在复杂任务中仔细检查规划步骤的重要性。这些技巧能帮助开发者更高效地使用Claude Code完成项目开发。
安卓framework学习2:Ubuntu安装trae——软件包与目录系统全解析
成功编译表示环境配置正确。
【Python百日进阶-Web开发-Feffery】Day385 -“一起Dash”训练营Lesson-07_利用fac构建表单(上)
文章目录前言:fac是什么?“人生苦短,我用Python;Web开发,首选Feffery!”↓↓↓ 今日笔记 ↓↓↓一、费老师课堂1.1 什么是表单1.2 页面效果1.3 课堂源码二、课后作业2.1 页面效果2.2 项目源码 前言:fac是什么? feffery-antd-components(简称fac),是国内大佬费弗里(Feffery)老师基于著名的React UI组件库ant design进行二次开发,将ant design中的诸多实用组件及特性引入Dash,帮助开发者使用极低的纯Python代
利用Termux与Transmission将旧安卓手机改造为低功耗PT下载机
BitTorrent协议作为点对点文件共享的核心技术,其客户端通过分布式网络实现高效的数据传输。Transmission作为一款轻量级、开源的BitTorrent客户端,以其极低的资源占用和稳定的协议支持,成为在资源受限设备上长期运行的理想选择。其技术价值在于能够将闲置的计算资源(如旧手机)转化为可用的网络节点,实现低功耗、静音的24小时不间断下载与做种。在私有种子站(PT)的应用场景中,稳定的客户端对于维持分享率至关重要。本文通过Termux这一Android上的完整Linux环境,详细演示了如何部署和优
Windows Docker Desktop部署MaxKB详细教程
MaxKB(Max Knowledge Base)是一款基于大语言模型(LLM)和检索增强生成(RAG)技术的开源知识库问答系统,旨在帮助企业、教育机构及研究组织高效管理知识并提供智能问答服务。
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
Waydroid 十分钟部署:Linux 上运行 Android 容器的安装指南
桌面上双击一个 APK,文件管理器提示"没有应用可以打开"。想装个安卓应用却不想开虚拟机?Waydroid 的思路是:别装模拟器,直接在 Linux 里用容器跑一套完整 Android。基于 LXC 命名空间,容器内的 Android 13 能直接碰到你的硬件,不需要再嵌套一层 hypervisor。 ## 30 秒判断:你的机器跑不跑得动 - 内核 5.4 及以上 - `ashmem`、`b
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
481



被折叠的 条评论
为什么被折叠?



