首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    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

    24010

    【linux命令讲解大全】189.常用的Linux命令详解

    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

    9710

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

    setsid setsid 是另一个让进程在后台执行的命令,它的作用是让进程打开一个新的会话并运行进程,使用方式为 setsid command。...但是 setsid 并没有为进程分配一个输出终端,所以进程还是会输出到当前终端上。...setsid的坑 另外,setsid 有个略坑的地方: 在终端中直接使用 setsid command 运行进程时,终端前台并不会被影响,command 会在后台默默运行。...这是因为,setsid 在其是进程组长时会 fork() 一个进程,但它不会 wait() 它的子进程,而是立刻退出,所以在终端内直接使用 setsid 时,setsid 作为进程组长不会占用终端界面。...而在 shell 脚本内,setsid 不是进程组长,它不会 fork() 子进程,而是由 bash 来fork() 一个子进程,而 bash 会 wait() 子进程,所以表现得像 setsid

    1.7K50

    PHP中的会话

    又因为连接了终端,所以在终端的输入会影响前台进程组,比如 ctrl+c 发送信号退出进程 技术点 1、使用 posix_setsid()函数设置当前进程为会话首进程 2、当执行php xxx.php 时...,默认系统会把当前的进程设置为会话首进程(使用strace查看),所以当前会话首进程不能使用posix_setsid 创建为会话首进程,只能使用子进程调用此函数 3、当调用此函数后,这个进程会变成组长进程...,并设置为会话首进程 4、当调用此函数后,该进程不会存在控制终端(可以理解为没有输入、输入设备) 代码 没有setsid的程序 function show() { $pid = posix_getpid...= pcntl_fork(); //让父进程退出,满足技术点第二点 if($pid>0){ exit(200); } //创建成功返回会话id,否则返回 -1 $num = posix_setsid...PHP Copy 通过上面截图可以看到,子进程19578的 pgid和sid 都是19578,也就满足上面提到技术点的第三点,将自己设置为组长进程和会话首进程 通过命令ps -exj 可以看到,设置setsid

    1.2K30

    什么是会话

    又因为连接了终端,所以在终端的输入会影响前台进程组,比如 ctrl+c 发送信号退出进程 技术点 1、使用 posix_setsid()函数设置当前进程为会话首进程 2、当执行php xxx.php 时...,默认系统会把当前的进程设置为会话首进程(使用strace查看),所以当前会话首进程不能使用posix_setsid 创建为会话首进程,只能使用子进程调用此函数 3、当调用此函数后,这个进程会变成组长进程...,并设置为会话首进程 4、当调用此函数后,该进程不会存在控制终端(可以理解为没有输入、输入设备) 代码 没有setsid的程序 function show() { $pid = posix_getpid...18879的组ID和会话ID是一样的,因为父进程是当前bash进程的子进程,所以继承了父进程的会话ID,而利用pcntl_fork 创建出的子进程则又继承了父进程的信息,所以看到的则是一样的 ---- 设置setsid...= pcntl_fork(); //让父进程退出,满足技术点第二点 if($pid>0){ exit(200); } //创建成功返回会话id,否则返回 -1 $num = posix_setsid

    1.2K20

    AirPlay Deamon学习(Linux Daemon)

    setsid()函数可以建立一个对话期: 如果,调用setsid的进程不是一个进程组的组长,此函数创建一个新的会话期。...(3)此进程没有控制终端,如果在调用setsid前,该进程有控制终端,那么与该终端的联系被解除。 如果该进程是一个进程组的组长,此函数返回错误。...(4)为了保证这一点,我们先调用fork()然后exit(),此时只有子进程在运行 (创建)编写守护进程的步骤: (1)在父进程中执行fork并exit推出; (2)在子进程中调用setsid函数创建新的会话...方法是在第1点的基础上,调用setsid()使进程成为会话组长: setsid(); 说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。...setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。

    1.2K30

    Linux守护进程

    那么子进程就脱离父进程的进程组,成为一个新进程的进程组组长; 新会话丢弃原有的控制终端,该会话没有控制终端; 该调用进程是组长进程,则出错返回,也就是说组长不能当会长; 建立新会话时,先调用fork,父进程会终止,子进程调用setsid...4. setsid()和getsid()函数 4.1 setsid()函数 包含头文件及函数原型 #include pid_t setsid(void); 函数描述 setsid...创建一个守护进程最关键的一步是调用setsid函数创建一个新的session,并成为session leader。 通过 ps aux 可以查看进程是否有依靠的终端,?...② 在子进程中创建会话 使用setsid()函数创建会话,使子进程完全独立出来,脱离控制(脱离终端)。...创建子进程,父进程退出*/ pid_t pid = fork(); if(pid > 0) { _exit(1); } /*成为会长*/ setsid

    11310

    Linux内核编程--进程组和守护进程

    会话的创建: 进程调用setsid函数创建一个新的Session,并成为Session Leader a.调用这个函数之前,当前进程不允许是进程组的Leader,否则该函数返回-1。...*要保证当前进程不是进程组的Leader也很容易,只要先fork再调用setsid就行了。...fork创建的子进程和父进程在同一个进程组中,进程组的Leader必然是该组的第一个进程,所以子进程不可能是该组的第一个进程,在子进程中调用setsid就不会有问题了。...如果在调用setsid之前该进程有一个控制终端,那么这种联系会被切断。...子进程继承了父进程的进程组ID,不过它有自己的进程ID,这就保证了子进程不是一个进程组的头部进程 Step.3 调用setsid( ),给守护进程创建一个新的进程组和会话,使当前进程成为新进程组的头部进程

    3K20

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

    使用方法:nohup COMMAND [ARG]… 2.setsid 在一个新的会话中运行命令,从而可以避开当前终端发出的HUP信号。...使用方法:setsid COMMAND [ARG]… 3.& 可以结合()产生一个新的子shell并在这个子shell中将任务放置到后台运行,从而不受当前shell终端的HUP信号影响。...再执行:bg 终止当前正在前台运行的进程: 直接敲下快捷键:ctrl +c 5.disown 亡羊补牢,为没有使用nohup与setsid的进程加上忽略HUP信号的功能。...screen是建立一个新的全屏虚拟会话终端,这个会话只有在手动输入exit的时候才会退出,在这个会话里执行的命令不用担心HUP信号会对我们的进程 造成影响,因此也不用给每个命令前都加上“nohup”或“setsid

    1.9K20

    教你写一个守护进程

    第二,虽然子进程继承了父进程的进程组ID,但它有自己独立的进程ID,这保证了子进程不是一个进程组的组长进程,这是下面将要调用 setsid 函数的先决条件! 子进程调用 setsid 创建会话。...setsid()函数创建新的会话,由于之前子进程并不是进程组的组长进程,所以调用 setsid()会使得子进程创建一个新的会话,子进程成为新会话的首领进程,同样也创建了新的进程组、子进程成为组长进程,此时创建的会话将没有控制终端...所以这里调用 setsid 有三个作用:让子进程摆脱原会话的控制、让子进程摆脱原进程组的控制和让子进程摆脱原控制终端的控制。...setsid 函数能够使子进程完全独立出来,从而脱离所有其他进程的控制。 将工作目录更改为根目录。...()) { perror("setsid error"); exit(-1); } /* 2.设置当前工作目录为根目录 */ if (0 > chdir("/")) {

    1.5K30
    领券