使用SSH远程登陆上Linux服务器,运行一些耗时的任务时,如果因为网络中断,这些任务也会就此中断,应此需要这些任务不受终端断开而影响,首先先看下图:这是运行以下命令的结果 : ping localhost > /dev/null &,很明显ping是sshd的子子进程,因此当sshd断开连接时,ping命令必然会终止。以下有几种方法避免此种情况发生:一、使用nohup:在网络断开和logout时,终端会收到hup信息,因此会关闭其所有子进程,nohup正是针对此情况:运行如下命令: nohup ping localhost > /dev/null & ,然后断开终端,可以看到:断开终端之后,父进程ID变为1,即被init所接管的孤儿进程,因为其原来的父进程30999已经退出。二、使用setuidsetuid ping localhost > /dev/null &可见setsid直接将其父进程ID设置1三、使用()加上&元字符运行如下命令:( ping localhost > /dev/null &)同setsid一样结果,过程是如下的├─sshd─┬─sshd─┬─bash───bash───ping因为&是元字符,因此会新开一个bash来解释执行ping,然后()使ping成为子shell,右边的bash在解释完毕后会退出,但是ping子进程还在,因此使其成为孤儿进程,被init接管。四、使用screen可能需要手动安装 yum install -y screen常用命令:screen:启用一个screen会话键入C-a c ,按下Ctrl键+a组合键,然后再按下c键:会在当前screen会话中新建一个窗口/BASHexit:如果是该screen会话的唯一窗口,该screen会话将会退出,否则screen会切换到前一个窗口。screen -d pid:detach分离screen会话screen -r pid:reattach重新附着会话,比如你可以在一个会话中前台运行ls -R /,然后退出screen会话,再reattach该会话,可以发现仍在继续执行或者已经执行完毕。 五、使用disown用法如下:disown -h jobspec : 让某个作业忽略HUP信号。
disown -ah : 让所有作业忽略HUP信号。
disown -rh : 让正在运行的作业忽略HUP信号。针对作业,适用于运行时比如加了 & 的命令,使用此命令后会将其从作业列表中删除,如果是前台运行的命令的话,可以先按Ctrl+Z,然后bg jobspec,再使用disown即可。如何合理设置Linux的swap分区[VirtualBox]Linux host访问guest服务相关资讯 Linux教程
- Linux教程:如何在命令行中查看目 (07/28/2014 12:22:23)
- Linux 修改root密码 (11/03/2012 07:53:38)
- su - root 与su root的区别 (06/06/2012 00:39:40)
| - Linux进程间通信:消息队列 (01/28/2013 09:43:00)
- U盘安装Linux开机无法启动解决方法 (10/07/2012 08:55:52)
- Windows 7/Linux 同步时间 (05/15/2012 06:17:55)
|
本文评论 查看全部评论 (0)