我对ulimit
:
ulimit -u unlimited
ulimit -n 60000
如果我在屏幕上执行这些操作,它们会永远保留在屏幕上作为设置,直到我杀死屏幕或每次运行程序时都必须运行它吗?
我想做的事情是无关紧要的,我只是想知道它们是否会作为屏幕内的设置保存。
答案 0 :(得分:5)
ulimit
是bash 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 space,file descriptor表等...您可以使用proc(5)来查询它们(尝试一些要运行cat /proc/self/limits
和cat /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 emulators和tty demystified页面。
(真实的锤子击中笔记本电脑的图片,然后用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计划。不一样。