golang 执行命令行(二)--修改进程启动用户
继续上文所述,有时候我们需要设置进程的启动用户,操作与设置进程组的方式类似,不多说直接上代码:
// 修改进程的执行用户
func withUserAttr(cmd *exec.Cmd, name string) error {
// 检测用户是否存在
user, err := user.Lookup(name)
if err != nil {
return errors.Wrapf(err, "invalid user %s", name)
}
// set process attr
// 获取用户 id
uid, err := strconv.ParseUint(user.Uid, 10, 32)
if err != nil {
return err
}
// 获取用户组 id
gid, err := strconv.ParseUint(user.Gid, 10, 32)
if err != nil {
return err
}
attr := cmd.SysProcAttr
//设置进程执行用户
attr.Credential = &syscall.Credential{
Uid: uint32(uid),
Gid: uint32(gid),
NoSetGroups: true,
}
cmd.SysProcAttr = attr
return nil
}
1.首先检测 user name 是否合法
2.更新进程的启动用户属性
golang 执行命令行(二)--修改进程启动用户的更多相关文章
- golang执行命令行(一)
golang中会经常遇到要 fork 子进程的需求.go 标准库为我们封装了 os/exec标准包,当我们要运行外部命令时应该优先使用这个库. 执行 command 这里我简单结合context 和 ...
- UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串
lienhua342014-10-15 ISO C 定义了 system 函数,用于在程序中执行一个命令字符串.其声明如下, #include <stdlib.h> int system( ...
- 在CMD命令行下关闭进程的命令
转载: [重要]在CMD命令行下关闭进程的命令━━━━━━━━━━━━━━━━━━━━━━━━━━ 方法一: 在"运行"中输入:ntsd -c q -pn 程序名字(在MS-Dos ...
- ResHacker 用命令行方式修改 windows PE文件版本号
由于工作需要在詹金斯(genkins)集成环境打包,打包避免不了需要修改版本号,写入版本号最简单的方式通过修改windows rc文件 这就意味着,每次构建新版本前需要修改一次源文件 这个在用詹金斯集 ...
- redis 命令行查看修改配置文件项、配置文件说明
命令行查看修改配置文件项 config get | config set | config rewrite config get requirepass // 获取密码config set requi ...
- mac linux rename命令行批量修改文件名
我的mac使用命令行批量修改名字时发现居然没有rename的指令: zsh: command not found: rename 所以使用HomeBrew先安装一下: ➜ ~ brew install ...
- Python执行命令行
背景 我们知道,虽然会破坏平台独立性,但是有的时候需要在代码里面调用命令行来获取一些信息,那么了解在 Python 中如何执行命令行至关重要 使用介绍 Python 中使用命令行可以通过 subpro ...
- 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它
无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer.Windows服务器管理工具或NET START命令启动它 1. ...
- 【转载】在LoadRunner向远程Linux/Unix执行命令行并收集性能数据
前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”,当然连接之后的故事由你主导. 今天要讲的,是一个非Java版本.是对“在LoadRunner中执行命令行程序之:pope ...
随机推荐
- 关于System.Reflection.TargetInvocationException 异常
什么是TargetInvocationException 由通过反射调用的方法引发的异常. 继承 Object Exception ApplicationException TargetInvocat ...
- openjdk k8s port-forward 连接容器jmx服务
jmx 是java 自带的,如果需要使用我们只需要添加对应的配置即可,以下演示docker 集成jmx 使用kompose 生成k8s 的部署文件,使用port-forward 进行连接,所以java ...
- Android Studio一直显示Building“project name”Gradle project info问题详解
关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 Android Studio一直显示 Building&quo ...
- 在Modelsim波形窗口复制信号
可以通过张贴复制变量名在Modelsim波形窗口复制信号.
- shell脚本编程基础之自定义函数库
脚本编程知识点 ${#VAR_NAME}:引用变量中字符的长度 A="25 90 100 120": echo ${A#* }:针对A变量,#表示从左往右,*空格表示以空格为分隔符 ...
- DEA Push rejected: Push to origin/master was rejected问题的解决方法
打开需要上传文件所在的文件夹 使用git bash git pull origin master –allow-unrelated-histories git push -u origin maste ...
- 第06组 Beta冲刺(2/5)
队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 维护后端代码 学习后端架构 GitHub签入记录 接下来的计划 维护后端代码,跟进组员完 ...
- free中buffer 与 cache 的区别
通常人们所说的Cache就是指缓存SRAM. SRAM叫静态内存,“静态”指的是当我们将一笔数据写入SRAM后,除非重新写入新数据或关闭电源,否则写入的数据保持不变. 由于CPU的速度比内存和硬盘的速 ...
- JVM探究之 —— Java内存区域
1. 概述 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”又是从事最基础工作的“劳动人民”——既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的 ...
- MySql通过数据库文件恢复数据库
以表”Table”为例: 如类型是MyISAM, 数据文件则以”Table.frm””Table.MYD””Table.MYI””三个文件存储于”/data/$databasename/”目录中. 如 ...