之间有什么区别
$ nohup foo
Run Code Online (Sandbox Code Playgroud)
和
$ foo &
Run Code Online (Sandbox Code Playgroud)
和
$ foo &
$ disown
Run Code Online (Sandbox Code Playgroud) 有时我想在回家之前启动一个长时间运行的进程,所以我创建了一个到服务器的 SSH 会话来启动这个进程,但是我想关闭我的笔记本电脑回家,晚饭后,我想检查我在下班前开始的过程。我怎样才能用 SSH 做到这一点?我的理解是,如果您中断 SSH 连接,您也会中断服务器上的登录会话,从而终止长时间运行的进程。
来自 Mauerer 的 Linux 内核架构,
内核线程是由内核本身直接启动的进程。它们将内核函数委托给一个单独的进程,并在那里与系统中的其他进程“并行”执行(实际上,与内核本身的执行并行)。内核线程通常被称为(内核)守护进程。例如,它们用于执行以下任务:
- 定期将修改的内存页面与页面来源的块设备同步(例如,使用 mmap 映射的文件)。
- 将很少使用的内存页写入交换区。
- 管理延迟的操作。
- 为文件系统实现事务日志。
基本上,有两种类型的内核线程:
- 类型 1 — 线程启动并等待,直到内核请求执行特定操作。
- 类型 2 — 一旦启动,线程就会定期运行,检查特定资源的利用率,并在利用率超过或低于设定的限制值时采取行动。内核使用这种类型的线程进行持续监控任务。
由于 Mauerer 的书说内核线程是进程,我认为它们必须在用户模式下运行,而不是在内核模式下运行。(或者我错了?进程可以在不同时间以用户模式或内核模式运行,还是仅在一种模式下运行?)
但是 Bovet 的《Understanding Linux Kernel》说内核线程只在内核模式下运行(见下面的引述)。两本书中“内核线程”的概念是同一个概念吗?
传统的 Unix 系统将一些关键任务委托给间歇运行的进程,包括刷新磁盘缓存、换出未使用的页面、服务网络连接等。事实上,以严格的线性方式执行这些任务是没有效率的。如果在后台调度它们的功能和最终用户进程,它们都会得到更好的响应。因为一些系统进程只在内核模式下运行,现代操作系统将它们的功能委托给内核线程,内核线程不会受到不必要的用户模式上下文的影响。在 Linux 中,内核线程在以下方面与常规进程不同:
- 内核线程仅在内核模式下运行,而常规进程在内核模式和用户模式下交替运行。
- 因为内核线程只在内核模式下运行,所以它们只使用大于 PAGE_OFFSET 的线性地址。另一方面,常规进程在用户模式或内核模式下使用所有 4 GB 的线性地址。
Mauerer 的书说内核线程是由内核直接启动的,而且似乎还说守护进程是内核线程的同义词。所以我认为守护进程必须由内核直接启动。
但是https://unix.stackexchange.com/a/193918/674说那个screen
守护进程是由screen
用户界面启动的(见下面的引用)。我认为screen
用户界面是一个进程,而不是内核。是的概念daemon
在Mauerer的书,并在链接的答复同一个概念?
当您第一次启动时
screen
,您实际上是在启动一个用户界面 (ui),它默认会创建一个守护进程(会话管理器)。
总的来说,您如何理解“内核线程”、“进程”和“守护进程”的概念,它们的关系和区别?
http://linuxg.net/how-to-transform-a-process-into-a-daemon-in-linux-unix/给出了一个在 bash 中守护进程的例子:
$ nohup firefox& &> /dev/null
Run Code Online (Sandbox Code Playgroud)
如果我是对的,该命令与“nohup 和后台进程”相同。但是守护进程不只是一个 nohupped 和后台进程吗?
这里缺少哪些步骤来守护进程?
例如,在守护进程时是否不需要更改父进程?如果是,你如何在 bash 中做到这一点?我仍在尝试了解相关回复https://unix.stackexchange.com/a/177361/674。
还有哪些步骤和条件?
看我的相关问题/sf/ask/2499381601/
和重定向一起使用时nohup
,正确的顺序是什么&
?
为什么其他命令不正确?
例如,
$ nohup firefox& &> /dev/null
$ nohup firefox &> /dev/null &
Run Code Online (Sandbox Code Playgroud)
而且我不知道如何更改 nohup 与重定向和&
.
另一个例子,
$ nohup sleep 1000 & &>/dev/null
Run Code Online (Sandbox Code Playgroud)
不会重定向到/dev/null
,但仍会重定向到./nohup.out
。
bash ×2
daemon ×2
linux ×2
nohup ×2
command-line ×1
disown ×1
job-control ×1
linux-kernel ×1
process ×1
shell ×1
ssh ×1