尝试增加/proc

This commit is contained in:
zhangzheng
2025-03-24 22:42:55 +08:00
parent 54b6bc9c24
commit 7f9da10e19
15 changed files with 98 additions and 91 deletions

View File

@@ -18,12 +18,10 @@ typedef struct ns_node
node_type_t type; //!< 节点类型
struct ns_node *parent; //!< 父节点
struct ns_node *next; //!< 下一个
// union
// {
struct ns_node *sub; //!< 子树
obj_handler_t svr_hd; //!< 服务节点
// };
int ref; //!< 引用计数
struct ns_node *sub; //!< 子树
obj_handler_t svr_hd; //!< 服务节点
int belong_pid; //!< 属于哪个pid
int ref; //!< 引用计数
} ns_node_t;
typedef struct ns
{

View File

@@ -14,6 +14,7 @@
#include "u_rpc_svr.h"
#include "u_slist.h"
#include "u_types.h"
#include "u_mutex.h"
typedef struct watch_entry
{
pid_t watch_pid;//!<被监控的pid
@@ -30,6 +31,7 @@ typedef struct pm
{
rpc_svr_obj_t svr_obj;
slist_head_t watch_head;
u_mutex_t lock;
} pm_t;
#define PM_CREATE_DUMMY_TASK 0x1
@@ -59,7 +61,7 @@ static inline pm_flags_t pm_flags_init(uint8_t mem_block, uint8_t flags, pid_t p
};
}
void pm_svr_obj_init(pm_t *pm);
int pm_svr_obj_init(pm_t *pm);
int pm_rpc_run_app(const char *path, pm_flags_t pm_flags, char *params, int params_len_or_app_size, char *env, int envs_len);
int pm_rpc_kill_task(int src_pid, int pid, int flags, int exit_code);

View File

@@ -28,8 +28,7 @@ RPC_GENERATION_OP6(pm_t, PM_PROT, PM_RUN_APP, run_app,
rpc_ref_array_uint32_t_uint8_t_96_t, rpc_array_uint32_t_uint8_t_96_t, RPC_DIR_IN, RPC_TYPE_DATA, params,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, params_len,
rpc_ref_array_uint32_t_uint8_t_64_t, rpc_array_uint32_t_uint8_t_64_t, RPC_DIR_IN, RPC_TYPE_DATA, envs,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, envs_len
)
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, envs_len)
{
int16_t ret = -1;
@@ -38,17 +37,17 @@ RPC_GENERATION_OP6(pm_t, PM_PROT, PM_RUN_APP, run_app,
path->data[path->len - 1] = 0;
}
ret = pm_rpc_run_app((char *)path->data, pm_flags_init_raw(pm_flags->data),
(char *)params->data, params_len->data, (char *)envs->data, envs_len->data);
(char *)params->data, params_len->data, (char *)envs->data, envs_len->data);
return ret;
}
RPC_GENERATION_DISPATCH6(pm_t, PM_PROT, PM_RUN_APP, run_app,
rpc_ref_array_uint32_t_uint8_t_64_t, rpc_array_uint32_t_uint8_t_64_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, pm_flags,
rpc_ref_array_uint32_t_uint8_t_96_t, rpc_array_uint32_t_uint8_t_96_t, RPC_DIR_IN, RPC_TYPE_DATA, params,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, params_len,
rpc_ref_array_uint32_t_uint8_t_64_t, rpc_array_uint32_t_uint8_t_64_t, RPC_DIR_IN, RPC_TYPE_DATA, envs,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, envs_len)
rpc_ref_array_uint32_t_uint8_t_64_t, rpc_array_uint32_t_uint8_t_64_t, RPC_DIR_IN, RPC_TYPE_DATA, path,
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, pm_flags,
rpc_ref_array_uint32_t_uint8_t_96_t, rpc_array_uint32_t_uint8_t_96_t, RPC_DIR_IN, RPC_TYPE_DATA, params,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, params_len,
rpc_ref_array_uint32_t_uint8_t_64_t, rpc_array_uint32_t_uint8_t_64_t, RPC_DIR_IN, RPC_TYPE_DATA, envs,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, envs_len)
/*kill_task*/
RPC_GENERATION_OP3(pm_t, PM_PROT, PM_KILL_TASK, kill_task,
@@ -114,6 +113,7 @@ RPC_GENERATION_OP2(pm_t, PM_PROT, PM_WATCH_PID, del_watch_pid,
RPC_GENERATION_DISPATCH2(pm_t, PM_PROT, PM_WATCH_PID, del_watch_pid,
rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, pid,
rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags)
/*dispatch*/
RPC_DISPATCH4(pm_t, PM_PROT, typeof(PM_RUN_APP),
PM_RUN_APP, run_app,
@@ -121,8 +121,13 @@ RPC_DISPATCH4(pm_t, PM_PROT, typeof(PM_RUN_APP),
PM_WATCH_PID, watch_pid,
PM_COPY_DATA, copy_data)
void pm_svr_obj_init(pm_t *pm)
int pm_svr_obj_init(pm_t *pm)
{
int ret;
rpc_svr_obj_init(&pm->svr_obj, rpc_pm_t_dispatch, PM_PROT);
slist_init(&pm->watch_head);
ret = u_mutex_init(&pm->lock, handler_alloc());
return ret;
}

View File

@@ -25,6 +25,8 @@
#include "sig_svr.h"
#include "u_sema.h"
#include "u_task.h"
#include <ns_cli.h>
#ifdef CONFIG_USING_SIG
static sig_t sig_obj;
@@ -104,5 +106,13 @@ void sig_init(void)
assert(sema_wait_hd != HANDLER_INVALID);
tag = facotry_create_sema(FACTORY_PROT, vpage_create_raw3(KOBJ_ALL_RIGHTS, 0, sema_wait_hd), 0, 1);
assert(msg_tag_get_val(tag) >= 0);
char proc_path[20];
umword_t pid;
task_get_pid(TASK_THIS, &pid);
snprintf(proc_path, sizeof(proc_path), "/proc/%d", pid);
assert(ns_register(proc_path, sig_ipc, 0)>=0 && "task proc init failed.\n");
}
#endif