• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Error

            C++博客 首頁 新隨筆 聯系 聚合 管理
              217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

            linux重定向及nohup不輸出的方法

            先說一下linux重定向:
            0、1和2分別表示標準輸入、標準輸出和標準錯誤信息輸出,可以用來指定需要重定向的標準輸入或輸出。
            在一般使用時,默認的是標準輸出,既1.當我們需要特殊用途時,可以使用其他標號。例如,將某個程序的錯誤信息輸出到log文件中:./program 2>log。這樣標準輸出還是在屏幕上,但是錯誤信息會輸出到log文件中。
            另外,也可以實現0,1,2之間的重定向。2>&1:將錯誤信息重定向到標準輸出。
            Linux下還有一個特殊的文件/dev/null,它就像一個無底洞,所有重定向到它的信息都會消失得無影無蹤。這一點非常有用,當我們不需要回顯程序的所有信息時,就可以將輸出重定向到/dev/null。

            如果想要正常輸出和錯誤信息都不顯示,則要把標準輸出和標準錯誤都重定向到/dev/null, 例如:

            # ls 1>/dev/null 2>/dev/null

            還有一種做法是將錯誤重定向到標準輸出,然后再重定向到 /dev/null,例如:

            # ls >/dev/null 2>&1

            注意:此處的順序不能更改,否則達不到想要的效果,此時先將標準輸出重定向到 /dev/null,然后將標準錯誤重定向到標準輸出,由于標準輸出已經重定向到了/dev/null,因此標準錯誤也會重定向到/dev/null,于是一切靜悄悄:-)

             

            由于使用nohup時,會自動將輸出寫入nohup.out文件中,如果文件很大的話,nohup.out就會不停的增大,這是我們不希望看到的,因此,可以利用/dev/null來解決這個問題。

            nohup ./program >/dev/null 2>log &

            如果錯誤信息也不想要的話:

            nohup ./program >/dev/null 2>&1 &






            要實現守護進程,一種方法是按守護進程的規則去編程(本站有文章介紹過),比較麻煩;另一種方法是仍然用普通方法編程,然后用nohup命令啟動程序:
            nohup <程序名> &
            則控制臺logout后,進程仍然繼續運行,起到守護進程的作用(雖然它不是嚴格意義上的守護進程)。
            使用nohup命令后,原程序的的標準輸出被自動改向到當前目錄下的nohup.out文件,起到了log的作用,實現了完整的守護進程功能。

            ygwu @ 2005年04月18日 上午10:03

            For example:
            如何遠程啟動WebLogic服務?

            用telnet遠程控制服務器,遠程啟動WEBLOGIC服務,啟動后關閉telnet,WebLogic服務也跟著停止,這是因為使用telnet啟動的進程會隨著telnet進程的關閉而關閉。所以我們可以使用一些UNIX下的命令來做到不關閉。

            使用如下命令:

            nohup startWeblogic.sh&

            如果想要監控標準輸出可以使用:

            tail -f nohup.out


            訪客留言

            FreeBSD可以同時運行多個進程,在shell下直接輸入命令后,shell將進程放到前臺執行。如果要將進程放到后臺執行,需要在命令行的結尾加上一個 “&” 符號。下面的命令從后臺執行,從ftp.isc.org下載文件。

            $ fetch ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz &

            當程序已經在前臺執行的時候,可以使用^Z將這個程序掛起,暫停執行。然后可以使用bg命令將這個掛起的程序放到后臺執行,或者使用fg將某個在后臺或掛起的進程放到前臺執行。

            當在后臺運行了程序的時候,可以用jobs命令來查看后臺作業的狀態。在有多個后臺程序時,要使用來參數的fg命令將不同序號的后臺作業切換到前臺上運行。

            $ jobs

            [1]+ Running fetch ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz &

            $ fg %1

            fetch ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz

            在啟動了多個程序之后,可以使用ps命令來查看這些進程及其狀態。

            $ ps

            PID TT STAT TIME COMMAND

            501 p2 Ss 0:00.24 -bash (bash)

            988 p2 R+ 0:00.00 ps

            765 p3 Is+ 0:00.28 -bash (bash)

            230 v0 Is+ 0:00.14 -bash (bash)

            顯示的結果包括進程的標識號PID,控制終端TT(p0表示控制終端為ttyp0),進程的狀態STAT,進程使用的處理器時間TIME和具體的命令。

            可以給ps命令加上參數,來獲得更多的輸出內容,以下命令將輸出系統中所有的進程:

            $ ps waux

            USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND

            wb 989 0.0 0.4 400 236 p2 R+ 5:48PM 0:00.00 ps -aux

            root 1 0.0 0.1 496 72 ?? Is 10:12PM 0:00.02 /sbin/init --

            root 2 0.0 0.0 0 0 ?? DL 10:12PM 0:07.05 (pagedaemon)

            root 3 0.0 0.0 0 0 ?? DL 10:12PM 0:00.20 (vmdaemon)

            root 4 0.0 0.0 0 0 ?? DL 10:12PM 0:04.27 (syncer)

            root 27 0.0 0.0 204 0 ?? IWs - 0:00.00 (adjkerntz)

            root 91 0.0 0.5 820 328 ?? Is 2:12PM 0:00.82 syslogd

            daemon 100 0.0 0.0 792 0 ?? IWs - 0:00.00 (portmap)

            root 131 0.0 0.3 864 164 ?? Is 2:12PM 0:00.06 inetd

            root 134 0.0 0.3 980 192 ?? Is 2:12PM 0:00.11 cron

            root 138 0.0 0.6 1252 380 ?? Is 2:12PM 0:00.11 sendmail: accepti

            wb 230 0.0 1.1 1540 668 v0 Is+ 2:12PM 0:00.14 -bash (bash)

            root 231 0.0 0.0 824 0 v1 IWs+ - 0:00.00 (getty)

            root 232 0.0 0.0 824 0 v2 IWs+ - 0:00.00 (getty)

            root 500 0.0 0.9 876 524 ?? Ss 4:19PM 0:01.78 telnetd

            wb 501 0.0 1.4 1540 888 p2 Ss 4:19PM 0:00.24 -bash (bash)

            root 698 0.0 1.5 1644 900 ?? Is 4:49PM 0:00.02 /usr/local/sbin/s

            root 700 0.0 1.2 1308 748 ?? Ss 4:49PM 0:00.22 /usr/local/sbin/n

            root 702 0.0 3.4 2900 2112 ?? S 4:49PM 0:00.32 /usr/local/sbin/s

            root 764 0.0 0.9 880 540 ?? Is 5:10PM 0:00.22 telnetd

            wb 765 0.0 1.7 1536 1052 p3 Is+ 5:10PM 0:00.28 -bash (bash)

            root 0 0.0 0.0 0 0 ?? DLs 10:12PM 0:00.02 (swapper)

            當用戶啟動一個進程的時候,這個進程是運行在前臺,使用與相應控制終端相聯系的標準輸入、輸出進行輸入和輸出。即使將進程的輸入輸出重定向,并將進程放在后臺執行,進程仍然和當前終端設備有關系。正因為如此,在當前的登錄會話結束時,控制終端設備將和登錄進程相脫離,那么系統就向所有與這個終端相聯系的進程發送SIGHUP的信號,通知進程線路已經掛起了,如果程序沒有接管這個信號的處理,那么缺省的反應是進程結束。因此普通的程序并不能真正脫離登錄會話而運行進程,為了使得在系統登錄后還可以正常執行,只有使用命令nohup來啟動相應程序。

            從上面的ps的輸出結果可以看出,有些程序沒有控制終端,這些程序通常是一些后臺進程。使用命令nohup當然可以啟動這樣的程序,但nohup啟動的程序在進程執行完畢就退出,而常見的一些服務進程通常永久的運行在后臺,不向屏幕輸出結果。在Unix中這些永久的后臺進程稱為守護進程(daemon)。守護進程通常從系統啟動時自動開始執行,系統關閉時才停止。如果偶然某個守護進程消失了,那么它提供的服務將不再能被使用。

            在守護進程中,最重要的一個是超級守護進程inetd,這個進程接管了大部分網絡服務,但并不是對每個服務都自己進行處理,而是依據連接請求,啟動不同的服務程序與客戶機打交道。inetd支持網絡服務種類在它的設置文件/etc/inet.conf中定義。inet.conf文件中的每一行就對應一個端口地址,當inetd接受到連接這個端口的連接請求時,就啟動相應的進程進行處理。使用inetd的好處是系統不必啟動很多守護進程,從而節約了系統資源,然而使用inetd啟動守護進程相應反應會遲緩一些,不適合用于被密集訪問的服務進程

             

            posted on 2012-12-05 09:49 Enic 閱讀(15030) 評論(0)  編輯 收藏 引用 所屬分類: linux
            精品国产青草久久久久福利| 9191精品国产免费久久| 精品人妻伦一二三区久久 | 伊人久久大香线蕉亚洲五月天 | 久久久久人妻精品一区三寸蜜桃| 久久久久久久久久久精品尤物| 久久夜色tv网站| 99久久婷婷国产综合亚洲| 久久精品国产亚洲av麻豆蜜芽| 久久久久女人精品毛片| 亚洲中文久久精品无码ww16| 99久久国产综合精品网成人影院| 久久中文字幕人妻熟av女| 四虎亚洲国产成人久久精品| 久久99久久成人免费播放| 人妻少妇久久中文字幕| 久久精品夜夜夜夜夜久久| 人人狠狠综合88综合久久| 18岁日韩内射颜射午夜久久成人| 久久久久99这里有精品10| 波多野结衣AV无码久久一区| 久久99精品久久久久久9蜜桃| 国产精品久久久亚洲| 久久久亚洲AV波多野结衣| 久久人人爽人人澡人人高潮AV| 性高湖久久久久久久久AAAAA| 中文字幕亚洲综合久久2| 久久综合亚洲欧美成人| 欧美一区二区三区久久综| 久久婷婷色综合一区二区| 久久强奷乱码老熟女网站| 久久国产成人午夜aⅴ影院| 国产精品免费久久| 中文成人久久久久影院免费观看| 午夜天堂精品久久久久| 色综合久久综精品| 99久久无码一区人妻a黑| 东京热TOKYO综合久久精品| 国产亚洲欧美精品久久久| 久久91精品国产91久久麻豆| 亚洲va久久久久|