首页
学习
活动
专区
工具
TVP
发布

nohup、&、setsid、fork和fg、bg究竟有啥区别?

名词解释 名词(中文) 名词(英文) 解释 会话 Session 每打开一次终端(本地或远程)登录Linux,都会生成一个新的会话;除此之外,程序中也可以调用函数setsid创建一个新的会话;脚本也可以调用命令...setsid创建一个新的会话。...用户 User 指能登录Linux的用户帐号 用户ID UserID 用来唯一标识一个用户 伪终端或叫虚拟终端 pty (Pseudo Terminal) 控制终端 tty...子进程如果要脱离这些,代码中可通过调用setsid来实现。,而命令行或脚本中可以通过使用命令setsid来运行程序实现。...因此,调用setsid之前需要先fork,然后由产生的子进程调用setsid。 3. 以“&”方式运行有何问题?

1.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

linux命令讲解大全】207.「setsid」和「unset」命令:管理进程会话和删除变量的强大工具

setsid 在新的会话中运行程序 补充说明 setsid命令 子进程从父进程继承了:SessionID、进程组ID和打开的终端。子进程如果要脱离这些,代码中可通过调用setsid来实现。...,而命令行或脚本中可以通过使用命令setsid来运行程序实现。setsid帮助一个进程脱离从父进程继承而来的已打开的终端、隶属进程组和隶属的会话。...语法 setsid[options] [arguments ...]...选项 -c, --ctty 将控制终端设置为当前控制终端 -f, --fork 总是 fork -w, --wait 等待程序退出,并使用相同的返回 实例 可见 setsid 的使用也是非常方便的,也只需在要处理的命令前加上...setsid 即可 [root@root ~]# setsid ping www.ibm.com [root@root ~]# ps -ef |grep www.ibm.com root 31094

8710

Linux - 请允许我静静地后台运行

前言 常在 linux 下玩耍的开发者肯定会经常遇到需要对进程调度的情况,在 windows 中点击 最小化 去干别的就 OK 了,那么在 linux 下怎么办呢。...今天来介绍几个命令,帮大家系统地梳理一下 linux 的进程调度,并附上一些自己的使用心得和踩过的坑。 名词 在此之前,我们必须(当然也不是必须,但了解原理有利于理解和解决错误)先弄懂几个名词。...控制终端 每当我们使用终端工具打开一个本地或远程 shell,我们便打开了一个控制终端,通过 ps 命令可以查看到 command 为 ttyn 的就是它对应的进程了,同时它对应 linux /dev/...或 source 命令由终端执行 setsid; 其他 除了上面介绍的命令,还有 screen 和 tmux 等会话工具,他们都有自己的一套规范,也比较复杂,掌握本文的命令已经足够你驰骋 linux 进程控制了...参考: setsid为什么会在脚本中阻塞-StackoOerflow Linux 进程、进程组、会话周期、控制终端

1.7K50

AirPlay Deamon学习(Linux Daemon)

关于deamon在Linux中是守护进程,而我在做苹果物联网apple tv投屏airplay调用的是apple 底层deamon代码,特做次文档学习,该文章分为对Linux Daemon的学习和AirPlay...Deamon学习 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程。...在linux系统中也称为service。 CentOS7提供了一整套的service管理,systemctl命令。...setsid()函数可以建立一个对话期: 如果,调用setsid的进程不是一个进程组的组长,此函数创建一个新的会话期。...方法是在第1点的基础上,调用setsid()使进程成为会话组长: setsid(); 说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。

1.1K30

Linux运行与控制后台进程的方法

我们经常会碰到这样的问题,用ssh登录了远程的Linux服务器,运行了一些耗时较长的任务,结果却由于网络等的不稳定导致任务中途失败。...下面是对Linux下运行与控制后台进程的各种方法的介绍: 1.nohup 顾名思义,nohup的用途就是让提交的命令忽略所有的hangup信号。...使用方法:nohup COMMAND [ARG]… 2.setsid 在一个新的会话中运行命令,从而可以避开当前终端发出的HUP信号。...使用方法:setsid COMMAND [ARG]… 3.& 可以结合()产生一个新的子shell并在这个子shell中将任务放置到后台运行,从而不受当前shell终端的HUP信号影响。...再执行:bg 终止当前正在前台运行的进程: 直接敲下快捷键:ctrl +c 5.disown 亡羊补牢,为没有使用nohup与setsid的进程加上忽略HUP信号的功能。

1.8K20

node中创建服务进程

在通过git触发gitlab hook脚本后,需要在跳板机中执行相应的ssh命令执行shell文件启动node服务器,这需要使用一个常用的命令setsid,这样当ssh命令执行完毕shell退出后,node...最简单的方式,其实就是采用类似上文中介绍的方式: require('child_process').exec('setsid node app.js >/dev/null 2>&1 &'); 这样可以通过执行...下文中的所有讨论都是在linux环境下进行。 实现一 在linux系统中,父进程创建出子进程,此时父进程若退出,此时子进程则变为孤儿进程,其ppid变为1,即成为init进程的子进程。...在linux系统创建一个daemon进程需要几个步骤: 父进程创建子进程,父进程退出,让子进程成为孤儿进程,ppid=1 通过setsid命令或函数在子进程中创建新的会话和进程组 设置当前目录 设置文件权限...,并关闭父进程继承打开的fd 所谓会话和进程组,则是在linux多任务多用户下的概念。

1.6K60

守护进程编写标准和实现

Daemon(精灵)进程,是Linux中的后台服务进程,生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。类似于Windows下的服务程序。...通常的 linux 程序在我们通过终端运行挂起后,再关闭终端,这些程序的运行进程也会随着终端一起关闭,这是因为他们属于同一会话。...如果不想程序随着终端关闭而关闭,那么就要让程序脱离终端的会话组,那么就需要使用到setsid()函数了。一个正确的守护进程编写过程如下: ---- 1....在子进程中创建新会话 setsid()函数 使子进程完全独立出来,脱离控制 3. 改变当前目录为根目录 chdir()函数 防止占用可卸载的文件系统 也可以换成其它路径 4....= 0) { exit(1); } // 子进程开始工作 // 设置会话ID,使其彻底脱落终端工作 setsid(); // 改变当前工作目录到主目录 if (chdir(“/“) < 0) { perror

18940

教你写一个守护进程

Linux 中,系统与用户交互的界面称为终端,每一个从终端开始运行的进程都会依附于这个终端,这是上一小节给大家介绍的控制终端,也就是会话的控制终端。...Linux 中大多数服务器就是用守护进程实现的,譬如,Internet 服务器 inetd、Web 服务器 httpd 等。同时,守护进程完成许多系统任务,譬如作业规划进程 crond 等。...第二,虽然子进程继承了父进程的进程组ID,但它有自己独立的进程ID,这保证了子进程不是一个进程组的组长进程,这是下面将要调用 setsid 函数的先决条件! 子进程调用 setsid 创建会话。...setsid()函数创建新的会话,由于之前子进程并不是进程组的组长进程,所以调用 setsid()会使得子进程创建一个新的会话,子进程成为新会话的首领进程,同样也创建了新的进程组、子进程成为组长进程,此时创建的会话将没有控制终端...setsid 函数能够使子进程完全独立出来,从而脱离所有其他进程的控制。 将工作目录更改为根目录。

1.3K30

Linux守护进程的编程实现

这须要读者注意,照搬某些书上的规则(特别是BSD4.3和低版本号的System V)到Linux会出现错误的。以下将全面介绍Linux下守护进程的编程要点并给出具体实例。 一....它能够在Linux系统启动时从启动脚本/etc/rc.d中启动,能够由作业规划进程crond启动,还能够由用户终端(一般是shell)执行。...方法是在第1点的基础上,调用setsid()使进程成为会话组长: setsid(); 说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。...setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。因为会话过程对控制终端的独占性,进程同一时候与控制终端脱离。 3....int i; if(pid=fork()) exit(0);//是父进程,结束父进程 else if(pid< 0) exit(1);//fork失败,退出 //是第一子进程,后台继续执行 setsid

2.3K20

使程序在Linux下后台运行

我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处: 1:我们这边是否关机不影响日本那边的程序运行。...假如我们有程序pso.cpp,通过编译后产生可执行文件pso,我们要使pso在linux服务器后台执行。当客户端关机后重新登入服务器后继续查看本来在终端输出的运行结果。...附: 在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了: $ ....如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略hangup信号,或者setsid将将父进程设为init进程(进程号为1) $ echo $$ 21734 $ nohup ..../test.sh 515 29713 21734 0 11:47 pts/12 00:00:00 grep test $ setsid .

4.1K20

守护进程Xinted和日志记录Syslogd

2.调用setsid() 使得新创建的进程脱离控制终端,同时创建新的进程组,并成为该进程组的首进程。...由于守护进程不需要控制终端,因此,必须创建新的会话,以脱离父进程的影响,Linux系统提供了setsid函数用于创建新的会话,并使得调用setsid函数的进程成为新会话的领头进程。...setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。...为此,Linux系统提供了一种特殊的机制来解决守护进程的日志问题。syslogd守护进程通过接收其他守护进程的信息,并将这些信息记录在指定位置来解决日志记录问题。...Linux日志管理:       内核信息 -> klogd -> syslogd -> /var/log/dmesg       其他信息 -> syslogd -> /var/log/messages

74230

Python模块整理(六):守护进程

os.setsid()       #该方法做一系列的事:首先它使得该进程成为一个新会话的领导者,接下来它将进程转变一个新进程组的领导者                     #最后该进程不再控制终端...#perform second fork #第一个fork和setsid为第二个fork设置环境。第二个fork不是必须的。    ...运行的时候,建立一个进程,linux会分配个进程号。然后调用os.fork()创建子进程。若pid>0就是自己,自杀。...子进程跳过if语句,通过os.setsid()成为linux中的独立于终端的进程(不响应sigint,sighup等)。 第二次os.fork再创建一个子进程,自己自杀。...原因是os.setsid()后成为父进程,虽然已经不被动响应信号,但访问终端文件时控制权还是会失去。这次创建的进程真的是孤魂野鬼的daemon,并且外界对它影响被控制在最小。

63310
领券