相关疑难解决方法(0)


在 SSH 会话断开连接后保持进程运行

有时我想在回家之前启动一个长时间运行的进程,所以我创建了一个到服务器的 SSH 会话来启动这个进程,但是我想关闭我的笔记本电脑回家,晚饭后,我想检查我在下班前开始的过程。我怎样才能用 SSH 做到这一点?我的理解是,如果您中断 SSH 连接,您也会中断服务器上的登录会话,从而终止长时间运行的进程。

command-line ssh background-process

262
推荐指数
10
解决办法
24万
查看次数

内核线程是进程还是守护进程?

来自 Mauerer 的 Linux 内核架构,

内核线程是由内核本身直接启动的进程。它们将内核函数委托给一个单独的进程,并在那里与系统中的其他进程“并行”执行(实际上,与内核本身的执行并行)。内核线程通常被称为(内核)守护进程。例如,它们用于执行以下任务:

  • 定期将修改的内存页面与页面来源的块设备同步(例如,使用 mmap 映射的文件)。
  • 将很少使用的内存页写入交换区。
  • 管理延迟的操作。
  • 为文件系统实现事务日志。

基本上,有两种类型的内核线程:

  • 类型 1 — 线程启动并等待,直到内核请求执行特定操作。
  • 类型 2 — 一旦启动,线程就会定期运行,检查特定资源的利用率,并在利用率超过或低于设定的限制值时采取行动。内核使用这种类型的线程进行持续监控任务。
  1. 由于 Mauerer 的书说内核线程是进程,我认为它们必须在用户模式下运行,而不是在内核模式下运行。(或者我错了?进程可以在不同时间以用户模式或内核模式运行,还是仅在一种模式下运行?)

    但是 Bovet 的《Understanding Linux Kernel》说内核线程只在内核模式下运行(见下面的引述)。两本书中“内核线程”的概念是同一个概念吗?

    传统的 Unix 系统将一些关键任务委托给间歇运行的进程,包括刷新磁盘缓存、换出未使用的页面、服务网络连接等。事实上,以严格的线性方式执行这些任务是没有效率的。如果在后台调度它们的功能和最终用户进程,它们都会得到更好的响应。因为一些系统进程只在内核模式下运行,现代操作系统将它们的功能委托给内核线程内核线程不会受到不必要的用户模式上下文的影响。在 Linux 中,内核线程在以下方面与常规进程不同:

    • 内核线程仅在内核模式下运行,而常规进程在内核模式和用户模式下交替运行。
    • 因为内核线程只在内核模式下运行,所以它们只使用大于 PAGE_OFFSET 的线性地址。另一方面,常规进程在用户模式或内核模式下使用所有 4 GB 的线性地址。
  2. Mauerer 的书说内核线程是由内核直接启动的,而且似乎还说守护进程是内核线程的同义词。所以我认为守护进程必须由内核直接启动。

    但是https://unix.stackexchange.com/a/193918/674说那个screen守护进程是由screen用户界面启动的(见下面的引用)。我认为screen用户界面是一个进程,而不是内核。是的概念daemon在Mauerer的书,并在链接的答复同一个概念?

    当您第一次启动时screen,您实际上是在启动一个用户界面 (ui),它默认会创建一个守护进程(会话管理器)。

  3. 总的来说,您如何理解“内核线程”、“进程”和“守护进程”的概念,它们的关系和区别?

linux process linux-kernel daemon

12
推荐指数
1
解决办法
7385
查看次数

在 shell 中守护进程?

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/

linux bash daemon

10
推荐指数
1
解决办法
3万
查看次数

`nohup`、`&` 和重定向之间的顺序?

和重定向一起使用时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 io-redirection nohup background-process

5
推荐指数
1
解决办法
3909
查看次数