在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ Nohup命令
信號
創(chuàng)建目錄權限
示例程序
進程的定義
Hello World進程
創(chuàng)建進程
進程鎖
第四章 項目實例Run
Nohup命令
PID
前言
系統(tǒng)調(diào)用sendfile
進程參數(shù)
參考書籍
后記
進程狀態(tài)
本書概述
寫時復制(Copy On Write)
Docker簡介
第五章 注意事項
實現(xiàn)Run
孤兒進程概念
共享內(nèi)存
衍生(Spawn)新進程
PPID
第三章 進程進階
退出碼
簡介
進程文件
Thanks for reading!
項目學習
第一章 進程基礎
僵尸進程
系統(tǒng)調(diào)用
POSIX簡介
執(zhí)行(Exec)外部程序
文件描述符
進程名字
進程輸入與輸出
Cgroups
進程間通信
查看PID
死鎖概念
進程越多越好?
Run項目架構
  • 1.
復制(Fork)進程
第二章 Go編程實例
活鎖概念
守護(Daemon)進程
并發(fā)與并行
捕獲SIGKILL
Namespaces簡介

Nohup命令

Nohup命令

每個開發(fā)者都會躺過這個坑,在命令行跑一個后臺程序,關閉終端后發(fā)現(xiàn)進程也退出了,網(wǎng)上搜一下發(fā)現(xiàn)要用nohup,究竟什么原因呢?

原來普通進程運行時默認會綁定TTY(虛擬終端),關閉終端后系統(tǒng)會給上面所有進程發(fā)送TERM信號,這時普通進程也就退出了。當然還有些進程不會退出,這就是后面將會提到的守護進程。

Nohup的原理也很簡單,終端關閉后會給此終端下的每一個進程發(fā)送SIGHUP信號,而使用nohup運行的進程則會忽略這個信號,因此終端關閉后進程也不會退出。

舉個例子

我們用Go實現(xiàn)最簡單的Web服務器,代碼web_server.go如下。

package main

import (
  "fmt"
  "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Println("Handle request")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8000", nil)
}

然后在終端上運行,并測試一下。

? go build web_server.go
? ./web_server &
[1] 25967
?  wget 127.0.0.1:8000
--2014-12-28 22:24:07--  http://127.0.0.1:8003/
Connecting to 127.0.0.1:8003... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5 [text/plain]
Saving to: 'index.html.4'

100%[======================>] 5           --.-K/s   in 0s

2014-12-28 22:24:07 (543 KB/s) - 'index.html' saved [5/5]

如果關閉終端,curl命令就連不上我們的Web服務器了。如果使用nohup運行呢?

? go build web_server.go
? nohup ./web_server &
[1] 25968
? exit
? wget 127.0.0.1:8003
--2014-12-28 22:24:11--  http://127.0.0.1:8003/

發(fā)現(xiàn)關閉終端對Web服務器進程沒有任何影響,這正是我們預期的。這是運行守護進程最簡單的方法,實際上標準的守護進程除了處理信號外,還要考慮這種因素,后面將會詳述。

上一篇:后記下一篇:POSIX簡介