免费注册 查看新帖 |

Chinaunix

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

问 :关于ulimit 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-30 23:45 |只看该作者 |正序浏览
1)ulimit 是否只针对当前的会话有效,一旦退出连接再登录就失效?


  1. [n7css@monitor n7css]$ ulimit -f 1000
  2. [n7css@monitor n7css]$ ulimit -f
  3. 1000
复制代码


退出当前 shell 再次登录,发现可以突破限制了

  1. [n7css@monitor n7css]$ dd if=/dev/zero of=tmp_file bs=1K count=1024
  2. 读入了 1024+0 个块
  3. 输出了 1024+0 个块
  4. [n7css@monitor n7css]$
复制代码



2)root 用户也无法突破普通用户的 ulimit 设置吗?


  1. [n7css@monitor n7css]$ ulimit -f 1000
  2. [n7css@monitor n7css]$ ulimit -f
  3. 1000
复制代码


  1. [root@monitor n7css]# whoami
  2. root
  3. [root@monitor n7css]# pwd
  4. /home/n7css
  5. [root@monitor n7css]# dd if=/dev/zero of=tmp_file bs=1K count=1024
  6. 文件大小超出限制
  7. [root@monitor n7css]#
复制代码

[ 本帖最后由 ailms 于 2007-7-30 23:57 编辑 ]

论坛徽章:
0
38 [报告]
发表于 2007-08-07 00:46 |只看该作者
ulimit -u 3设置的是n7css用户在shell中能够fork的最多子进程数(RLIMIT_NPROC), -u设置包括软硬限制, 也就是说n7css用户的软硬限制fork数为3, 以后在该shell下软硬限制数可以设置为3, 也可以设置为2甚至1.  但是每一次设置的max fork值不能超过上一次的设置. 该用户的shell会话结束后, RLIMIT_NPROC数清除.

[zhaoke@islab ~]$ ulimit -u 3
[zhaoke@islab ~]$ ulimit -u
3
[zhaoke@islab ~]$ ulimit -u 30
bash: ulimit: max user processes: cannot modify limit: Operation not permitted
[zhaoke@islab ~]$ ulimit -Hu 30
bash: ulimit: max user processes: cannot modify limit: Operation not permitted
[zhaoke@islab ~]$ ulimit -Su 30
bash: ulimit: max user processes: cannot modify limit: Invalid argument
[zhaoke@islab ~]$ ulimit -Su 2
[zhaoke@islab ~]$ ulimit -u
2
[zhaoke@islab ~]$ ulimit -Su 3
[zhaoke@islab ~]$ ulimit -u
3
[zhaoke@islab ~]$ ulimit -Su 4
bash: ulimit: max user processes: cannot modify limit: Invalid argument
[zhaoke@islab ~]$ ulimit -Hu 4
bash: ulimit: max user processes: cannot modify limit: Operation not permitted



原帖由 ailms 于 2007-7-30 23:56 发表
又发现一个问题


[n7css@monitor n7css]$ ulimit -u 3
[n7css@monitor n7css]$ ps -u n7css
-bash: fork: 资源暂时不可用
[n7css@monitor n7css]$
[n7css@monitor n7css]$ ulimit -u 30
-bash: ulim ...

[ 本帖最后由 iventor 于 2007-8-7 00:57 编辑 ]

论坛徽章:
0
37 [报告]
发表于 2007-08-07 00:05 |只看该作者
多谢 iventor

这些实验结果我也知道,我想知道的是“为什么会这样?”

尤其是最后一个 ulimit -u 的 case

论坛徽章:
0
36 [报告]
发表于 2007-08-06 23:39 |只看该作者

回复 #1 ailms 的帖子

1. ulimit命令只对当前shell及由shell启动进程的资源进行限制, 退出后原先的ulimit设定(命令行)无效.
2. root用户有自己的ulimit设置(从/etc/security/limits.conf读入), 普通用户su到root用户后还是受
普通用户下ulimit命令所生成的数值限制.

ulimit -f 1000命令中的1000是1000K, 1M=1024K.
所以结果"文件大小超出限制"是合理的.

实例:

[zhaoke@islab ~]$ ulimit -f
unlimited
[zhaoke@islab ~]$ ulimit -f 1000
[zhaoke@islab ~]$ ulimit -f
1000
[zhaoke@islab ~]$ su -
Password:
[root@islab ~]# ulimit -f
1000
[root@islab ~]# dd if=/dev/zero of=tmp_file bs=1k count=1024
File size limit exceeded


[zhaoke@islab ~]$ ulimit -f
unlimited
[zhaoke@islab ~]$ ulimit -f 1024
[zhaoke@islab ~]$ ulimit -f
1024
[zhaoke@islab ~]$ su -
Password:
[root@islab ~]# ulimit -f
1024
[root@islab ~]# dd if=/dev/zero of=tmp_file bs=1k count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.00924075 s, 113 MB/s
[root@islab ~]# ll tmp_file
-rw-r--r-- 1 root root 1048576 2007-08-06 23:36 tmp_file

论坛徽章:
0
35 [报告]
发表于 2007-08-06 02:56 |只看该作者
就算RLIMIT_CPU等于0(进程能运行1秒钟), vi也是能够运行, x保存后shell程序立即被SIGKILL.

time bash -c 'ulimit -t 0; vi zhaoke; while :; do :; done'


原帖由 ailms 于 2007-8-2 13:14 发表
还是想问一下 :为什么 ulimit -t 无法自动结束 vi 、watch 这类需要全屏操作的程序呢?

论坛徽章:
0
34 [报告]
发表于 2007-08-02 15:23 |只看该作者

论坛徽章:
0
33 [报告]
发表于 2007-08-02 13:14 |只看该作者
还是想问一下 :为什么 ulimit -t 无法自动结束 vi 、watch 这类需要全屏操作的程序呢?

论坛徽章:
0
32 [报告]
发表于 2007-08-02 13:13 |只看该作者
原帖由 yuhe27913 于 2007-7-31 16:24 发表


也不完全是,ulimit首先参考的是/etc/security/limit.conf中的设置
你可以做一个测试,在该参数文件中加入root的条目,无论用户是su到root还是su -到root 它的ulimit相关值总是以/etc/security/limit.conf ...



/etc/security/limits.conf 我没有改过,都是默认值

所以上述的问题和该文件关系应该不大。

论坛徽章:
0
31 [报告]
发表于 2007-07-31 16:24 |只看该作者
原帖由 ailms 于 2007-7-31 14:45 发表
俺的想法是 :

由于 ulimit 是影响当前进程和子进程的,而 su - 后的进程也是当前 shell 的一个子进程

所以 ulimit 可能是根据 PPID 来控制的


也不完全是,ulimit首先参考的是/etc/security/limit.conf中的设置
你可以做一个测试,在该参数文件中加入root的条目,无论用户是su到root还是su -到root 它的ulimit相关值总是以/etc/security/limit.conf中的设定为准。

论坛徽章:
0
30 [报告]
发表于 2007-07-31 14:45 |只看该作者
俺的想法是 :

由于 ulimit 是影响当前进程和子进程的,而 su - 后的进程也是当前 shell 的一个子进程

所以 ulimit 可能是根据 PPID 来控制的
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP