ulimit Linux连接限制

时间:2017-11-04 14:05:03

标签: linux ulimit

我对ulimit

有疑问
ulimit -u unlimited
ulimit -n 60000

如果我在屏幕上执行这些操作,它们会永远保留在屏幕上作为设置,直到我杀死屏幕或每次运行程序时都必须运行它吗?

我想做的事情是无关紧要的,我只是想知道它们是否会作为屏幕内的设置保存。

1 个答案:

答案 0 :(得分:5)

ulimitbash builtin。它调用setrlimit(2)系统调用。

该系统调用在其-shell- process中修改了一些限制(同样是cd内置调用chdir(2),并修改了shell进程的working directory

在bash shell中,$$ expands to the pid of that shell进程。因此,您可以使用ps $$(甚至撰写,例如touch /tmp/foo$$cat /proc/$$/status

因此ulimit适用于您的shell并保持不变,直到您执行另一个ulimit命令(或直到您的shell终止)。

shell进程(及其工作目录)的限制由fork(2)从shell启动的每个进程继承。这些进程包括在同一个shell中运行命令的进程。请注意,更改某个进程的限制(或工作目录)不会影响父进程的限制。请注意,execve(2)不会更改限制或工作目录。

限制(和工作目录)进程 的属性(不是终端,屏幕,窗口等等)。每个流程都有自己的:限制和工作目录,virtual address spacefile descriptor表等...您可以使用proc(5)来查询它们(尝试一些要运行cat /proc/self/limitscat /proc/$$/maps以及ls -l /proc/self/cwd /proc/self/fd/)的shell。另见this。限制(和工作目录)由以fork(2)开头的子进程继承,该进程有自己的副本(因此限制不会被共享,而是被fork复制... )。

但是如果你启动另一个终端窗口,它正在运行另一个shell进程(它有自己的限制和工作目录)。

另见credentials(7)。请务必了解fork(2)execve(2)的工作原理,以及shell如何使用它们(对于每个启动新流程的命令,几乎都是这些命令)。

您在一些评论中提及kill(1)。请务必阅读其man页面(以及此处提到的每个手册页!)。另请阅读kill(2)signal(7)

程序可以单独调用setrlimit(2)(或chdir(2)),但这不会影响其父进程(通常是shell)的限制(或工作目录)。当然,它会影响运行该程序的进程的未来fork - ed child processes

我建议阅读ALP(一本关于Linux编程的免费下载书籍),其中有几章解释了所有这些。你需要几本书来解释细节。

ALP之后,请阅读intro(2),了解现有的syscalls(2),使用strace(1)和您自己的程序(编写一个小shell非常有启发性;或者研究某些现有代码的代码,并且可能阅读 Operating Systems: Three Easy pieces

NB。 screen(1)实用程序管理多个终端,每个终端通常都有shell进程。我不知道你是否提到那个实用程序。另请阅读terminal emulatorstty demystified页面。

真正杀死某个屏幕的唯一方法是使用锤子,如下所示: breaking a screen with a hammer

(真实的锤子击中笔记本电脑的图片,然后用gimp剪切,暂时放在我的网络服务器上;原始网址可能是https://www.istockphoto.com/fr/photo/femme-daffaires-stress%C3%A9-%C3%A0-lordinateur-crash-arrive-et-d%C3%A9truisent-le-moniteur-gm172788693-5836585,我理解许可证允许我这样做。)

不要那样做,你会后悔的。

显然,您正在谈论发送信号(使用kill(1)killall(1)pkill(1)到某些进程运行screen(1)计划或process group计划。不一样。