免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3263 | 回复: 9
打印 上一主题 下一主题

谁能说说 su --commmand 和su --session-command的区别? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-30 16:32 |只看该作者 |倒序浏览
怎么能证明su --commmand是创建了一个session?我把运行su的窗口会话关了,su所运行的命令也被结束了。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2008-08-30 16:34 |只看该作者
su的man可以告诉你

论坛徽章:
0
3 [报告]
发表于 2008-08-30 16:40 |只看该作者
原帖由 寂寞烈火 于 2008-8-30 16:34 发表
su的man可以告诉你


这次我是看了man才提问的。man上找不到。我想知道怎么看见区别,而不是相信man上说创建了就真的创建了。既然是独立的session,我把其他session关了,它也没了。

论坛徽章:
0
4 [报告]
发表于 2008-08-30 16:50 |只看该作者
-c, --command=COMMAND
              pass a single COMMAND to the shell with -c

       --session-command=COMMAND
              pass a single COMMAND to the shell with -c and do not create a new session

论坛徽章:
0
5 [报告]
发表于 2008-08-30 19:27 |只看该作者
su --command
会创建一个session,具体是什么我还不清楚,反正是个进程,有可能就是个子shell,
在这个session中执行传递过去的command

su --session-command
的话,不创建这个所谓的session进程,直接在当前shell下执行command

搂主你可以用ps axuf看一下这两种方式下的进程状态,
su --command的状态是
bash-->su-->command三个进程

su --session-command的状态是
bash-->su 只有两个进程。

具体为什么这么做,我也不太清楚,继续查。。。。

论坛徽章:
0
6 [报告]
发表于 2008-08-30 21:59 |只看该作者
关注中。。。。。。。

论坛徽章:
0
7 [报告]
发表于 2008-08-30 22:01 |只看该作者
原帖由 meiki05 于 2008-8-30 19:27 发表
su --command
会创建一个session,具体是什么我还不清楚,反正是个进程,有可能就是个子shell,
在这个session中执行传递过去的command

su --session-command
的话,不创建这个所谓的session进程,直接在 ...



分析得非常清楚!

赞!

论坛徽章:
0
8 [报告]
发表于 2008-08-30 23:16 |只看该作者
原帖由 萍水e相逢 于 2008-8-30 22:01 发表



分析得非常清楚!

赞!


还没试,我试了后会把结果贴出来的。我以为各session应该是相互独立的。按你分析的“子session”的思路,就成了树形结构了。
一个事实是两种su命令下,把运行su的session结束后su所运行的task也都没有了。我再看看是不是树形结构。

论坛徽章:
0
9 [报告]
发表于 2008-08-31 22:51 |只看该作者
原帖由 meiki05 于 2008-8-30 19:27 发表
su --command
会创建一个session,具体是什么我还不清楚,反正是个进程,有可能就是个子shell,
在这个session中执行传递过去的command

su --session-command
的话,不创建这个所谓的session进程,直接在 ...



我试过了,就进程创建而言两者没什么区别。先不研究了。


就这么试的。
#su -c a.out
  su --session-command=a.out
  echo end

[ 本帖最后由 wangfeiyue 于 2008-8-31 22:52 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-09-01 09:39 |只看该作者
对于一般的command,这两种su的执行效果应该是一样的,而且执行完之后都正常结束进程,返回到bash。
区别就是在于这个session,我判断,这个所谓的session就是由su启动的一个bash。
su --command 就是在这个新启动的bash中执行,
su --session-command 不启动子bash,而是在原有bash下执行。
也就是说,这两种方式的差别在于bash环境,如果用户在原有bash下定义了新的环境变量而没有export,或者定义了新的alias,这些新定义不会传递到子shell里。

另外,非常奇怪的是这两个option的名字,感觉颠倒了。
--command 倒是要用到session
--session-command 却是不用session
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP