Android的init.rc系列脚本中通常会定义很多native service,如下:
而这些service中有些我们会在合适的时候使用property_set("ctl.start",cmd)的方式进行启动,那么使用这种方式的时候能否携带参数进而传给实际要去运行的可执行程序呢?答案是可以的
这里我们不仔细分析property_set的原理了,简单来说就是init进程启动后会给property service建立一个socket,然后其他进程调用property_set的时候通过socket与init进程通信,而init进程监听到property service的socket有事件发生后,则会调用
262static void handle_property_set_fd()
263{
......
......
309 switch(msg.cmd) {
310 case PROP_MSG_SETPROP:
311 msg.name[PROP_NAME_MAX-1] = 0;
312 msg.value[PROP_VALUE_MAX-1] = 0;
313
314 if (!is_legal_property_name(msg.name, strlen(msg.name))) {
315 ERROR("sys_prop: illegal property name. Got: \"%s\"\n", msg.name);
316