######################################## 进程环境 ######################################## 进程的属性 **************************************** 一个进程包含了一些必要的属性: +-------------------------+----------------------------------+ | 属性 | 作用 | +=========================+==================================+ | ID | 在操作系统中唯一代表了进程的身份 | +-------------------------+----------------------------------+ | 实际用户 ID 和实际组 ID | 执行进程的用户的身份标示 | +-------------------------+----------------------------------+ | 有效用户 ID 和有效组 ID | 进程执行时权限和有效用户相等 | +-------------------------+----------------------------------+ | 当前工作目录 | 代表了进程解析相对路径的起点 | +-------------------------+----------------------------------+ | 环境变量列表 | 代表了进程的环境变量 | +-------------------------+----------------------------------+ 一般而言,有效 ID 和实际 ID 相等,但是当使用 sudo 执行程序后,程序的实际 ID 就被设置为了 0,使其具备等同 root 用户的资源访问权`` 例如,如果我们需要查看当前进程时候以 root 权限执行: .. code-block:: go if os.Geteuid() != 0 { logrus.Fatalln("请使用超级用户运行此程序") } 替代软件 **************************************** 下面的软件可用于替代 malloc: +-----------+----------------------------------------------------------+ | 库 | 特点 | +===========+==========================================================+ | libmalloc | 可以细化内存分配细节、并使用 mallinfo 查看已经分配的空间 | +-----------+----------------------------------------------------------+ | vmalloc | 可以对不同的储存区使用不同的技术 | +-----------+----------------------------------------------------------+ | quick-fit | 顾名思义 | +-----------+----------------------------------------------------------+ | jemalloc | malloc 在 FreeBSD 中的实现。具有良好的拓展性 | +-----------+----------------------------------------------------------+ | TCMalloc | Google 开源的工具 | +-----------+----------------------------------------------------------+ | alloca | 在栈帧上分配空间 | +-----------+----------------------------------------------------------+ 对于 libc 也有一些不同的实现: +--------+----------------+ | 库 | 特点 | +========+================+ | glibc | 大而全,效率高 | +--------+----------------+ | musl | 代码更简洁 | +--------+----------------+ | eglibc | 专注于优化空间 | +--------+----------------+