1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      使用strace查找Emacs啟動阻塞的原因有哪些

      這篇文章給大家分享的是有關(guān)使用strace查找Emacs啟動阻塞的原因有哪些的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

      超過十年行業(yè)經(jīng)驗,技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:網(wǎng)站設(shè)計、成都網(wǎng)站制作,成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,微信小程序定制開發(fā),微信開發(fā),App定制開發(fā),同時也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營銷和我們一樣獲得訂單和生意!

      由于使用了 spacemacs 的配置,配置上比較復(fù)雜,不太想通過實驗縮減配置的方式來摸索出問題的地方。剛好最近在學習使用 strace 工具,因此決定使用 strace 來看看 Emacs 到底卡在哪里。

      strace emacs --fg-daemon

      輸出的內(nèi)容特別多,這里只截取卡頓前的部分內(nèi)容

      readlinkat(AT_FDCWD, "/home", 0x7ffd1d3abb50, 1024) = -1 EINVAL (無效的參數(shù))readlinkat(AT_FDCWD, "/home/lujun9972", 0x7ffd1d3abf00, 1024) = -1 EINVAL (無效的參數(shù))readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d", 0x7ffd1d3ac2b0, 1024) = -1 EINVAL (無效的參數(shù))readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa", 0x7ffd1d3ac660, 1024) = -1 EINVAL (無效的參數(shù))readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa/exec-path-from-shell-20180323.1904", 0x7ffd1d3aca10, 1024) = -1 EINVAL (無效的參數(shù))readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa/exec-path-from-shell-20180323.1904/exec-path-from-shell.elc", 0x7ffd1d3acdc0, 1024) = -1 EINVAL (無效的參數(shù))lseek(7, -2655, SEEK_CUR)               = 1441read(7, "\n(defvar exec-path-from-shell-de"..., 4096) = 4096lseek(7, 5537, SEEK_SET)                = 5537lseek(7, 5537, SEEK_SET)                = 5537lseek(7, 5537, SEEK_SET)                = 5537lseek(7, 5537, SEEK_SET)                = 5537lseek(7, 5537, SEEK_SET)                = 5537lseek(7, 5537, SEEK_SET)                = 5537brk(0x7507000)                          = 0x7507000lseek(7, 5537, SEEK_SET)                = 5537lseek(7, 5537, SEEK_SET)                = 5537lseek(7, 5537, SEEK_SET)                = 5537read(7, "230\\205\26\0\t\22\\307\\310\t!\vC\\\"\\211\24\\2"..., 4096) = 2430lseek(7, 7967, SEEK_SET)                = 7967lseek(7, 7967, SEEK_SET)                = 7967lseek(7, 7967, SEEK_SET)                = 7967lseek(7, 7967, SEEK_SET)                = 7967read(7, "", 4096)                       = 0close(7)                                = 0getpid()                                = 10818faccessat(AT_FDCWD, "/home/lujun9972/bin/printf", X_OK) = -1 ENOENT (沒有那個文件或目錄)faccessat(AT_FDCWD, "/usr/local/sbin/printf", X_OK) = -1 ENOENT (沒有那個文件或目錄)faccessat(AT_FDCWD, "/usr/local/bin/printf", X_OK) = -1 ENOENT (沒有那個文件或目錄)faccessat(AT_FDCWD, "/usr/bin/printf", X_OK) = 0stat("/usr/bin/printf", {st_mode=S_IFREG|0755, st_size=51176, ...}) = 0openat(AT_FDCWD, "/dev/null", O_RDONLY|O_CLOEXEC) = 7faccessat(AT_FDCWD, "/proc/5070/fd/.", F_OK) = 0faccessat(AT_FDCWD, "/proc/5070/fd/.", F_OK) = 0faccessat(AT_FDCWD, "/bin/bash", X_OK)  = 0stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=903440, ...}) = 0pipe2([8, 9], O_CLOEXEC)                = 0rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0vfork()                                 = 10949rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0close(9)                                = 0close(7)                                = 0read(8, "bash: \346\227\240\346\263\225\350\256\276\345\256\232\347\273\210\347\253\257\350\277\233\347\250\213\347\273"..., 16384) = 74read(8, "bash: \346\255\244 shell \344\270\255\346\227\240\344\273\273\345\212\241\346\216\247\345"..., 16310) = 35read(8, "setterm: \347\273\210\347\253\257 xterm-256color \344"..., 16275) = 51read(8, "Couldn't get a file descriptor r"..., 16224) = 56read(8, "bash: [: \357\274\232\351\234\200\350\246\201\346\225\264\346\225\260\350\241\250\350\276\276\345\274"..., 16168) = 34read(8, "Your display number is 0\n", 16134) = 25read(8, "Test whether fcitx is running co"..., 16109) = 53read(8, "Fcitx is running correctly.\n\n==="..., 16056) = 87read(8, "Launch fbterm...\n", 15969)    = 17read(8, "stdin isn't a tty!\n", 15952)  = 19read(8, "__RESULT\0/home/lujun9972/bin:/ho"..., 15933) = 298read(8, 0x7ffd1d39ce9d, 15635)          = ? ERESTARTSYS (To be restarted if SA_RESTART is set)--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=10949, si_uid=1000, si_status=0, si_utime=10, si_stime=7} ---rt_sigreturn({mask=[]})                 = -1 EINTR (被中斷的系統(tǒng)調(diào)用)read(8, "", 15635)                      = 0wait4(10949, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 10949close(8)                                = 0getpid()                                = 10818faccessat(AT_FDCWD, "/home/lujun9972/bin/printf", X_OK) = -1 ENOENT (沒有那個文件或目錄)faccessat(AT_FDCWD, "/usr/local/sbin/printf", X_OK) = -1 ENOENT (沒有那個文件或目錄)faccessat(AT_FDCWD, "/usr/local/bin/printf", X_OK) = -1 ENOENT (沒有那個文件或目錄)faccessat(AT_FDCWD, "/usr/bin/printf", X_OK) = 0stat("/usr/bin/printf", {st_mode=S_IFREG|0755, st_size=51176, ...}) = 0openat(AT_FDCWD, "/dev/null", O_RDONLY|O_CLOEXEC) = 7faccessat(AT_FDCWD, "/proc/5070/fd/.", F_OK) = 0faccessat(AT_FDCWD, "/proc/5070/fd/.", F_OK) = 0faccessat(AT_FDCWD, "/bin/bash", X_OK)  = 0stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=903440, ...}) = 0pipe2([8, 9], O_CLOEXEC)                = 0rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0vfork()                                 = 11679rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0close(9)                                = 0close(7)                                = 0read(8, "setterm: \347\273\210\347\253\257 xterm-256color \344"..., 16384) = 51read(8, "Couldn't get a file descriptor r"..., 16333) = 56read(8, "/home/lujun9972/.bash_profile: \347"..., 16277) = 72read(8, "Your display number is 0\nTest wh"..., 16205) = 78read(8, "Fcitx is running correctly.\n\n==="..., 16127) = 104read(8, "stdin isn't a tty!\n", 16023)  = 19read(8, "__RESULT\0b269cd09e7ec4e8a115188c"..., 16004) = 298read(8, 0x7ffd1d39cba6, 15706)          = ? ERESTARTSYS (To be restarted if SA_RESTART is set)--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=11679, si_uid=1000, si_status=0, si_utime=1, si_stime=1} ---rt_sigreturn({mask=[]})                 = -1 EINTR (被中斷的系統(tǒng)調(diào)用)read(8,

      很容易就可以看出,當 Emacs 卡頓時,它在嘗試從 8 號文件句柄中讀取內(nèi)容。

      那么 8 號文件句柄在哪里定義的呢?往前看可以看到:

      pipe2([8, 9], O_CLOEXEC)                = 0rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0vfork()                                 = 11679rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0close(9)                                = 0

      可以推測出,Emacs 主進程 fork 出一個子進程(進程號為 11679),并通過管道讀取子進程的內(nèi)容。

      然而,從

      --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=11679, si_uid=1000, si_status=0, si_utime=1, si_stime=1} ---rt_sigreturn({mask=[]})                 = -1 EINTR (被中斷的系統(tǒng)調(diào)用)read(8,

      可以看出,實際上子進程已經(jīng)退出了(父進程收到 SIGCHLD 信號),父進程確依然在嘗試從管道中讀取內(nèi)容,導致的阻塞。

      而且從

      read(8, "setterm: \347\273\210\347\253\257 xterm-256color \344"..., 16384) = 51read(8, "Couldn't get a file descriptor r"..., 16333) = 56read(8, "/home/lujun9972/.bash_profile: \347"..., 16277) = 72read(8, "Your display number is 0\nTest wh"..., 16205) = 78read(8, "Fcitx is running correctly.\n\n==="..., 16127) = 104read(8, "stdin isn't a tty!\n", 16023)  = 19read(8, "__RESULT\0b269cd09e7ec4e8a115188c"..., 16004) = 298read(8, 0x7ffd1d39cba6, 15706)          = ? ERESTARTSYS (To be restarted if SA_RESTART is set)

      看到,子進程的輸出似乎是我的交互式登錄 bash 啟動時的輸出(加載了 .bash_profile

      在往前翻發(fā)現(xiàn)這么一段信息:

      readlinkat(AT_FDCWD, "/home", 0x7ffd1d3abb50, 1024) = -1 EINVAL (無效的參數(shù))readlinkat(AT_FDCWD, "/home/lujun9972", 0x7ffd1d3abf00, 1024) = -1 EINVAL (無效的參數(shù))readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d", 0x7ffd1d3ac2b0, 1024) = -1 EINVAL (無效的參數(shù))readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa", 0x7ffd1d3ac660, 1024) = -1 EINVAL (無效的參數(shù))readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa/exec-path-from-shell-20180323.1904", 0x7ffd1d3aca10, 1024) = -1 EINVAL (無效的參數(shù))readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa/exec-path-from-shell-20180323.1904/exec-path-from-shell.elc", 0x7ffd1d3acdc0, 1024) = -1 EINVAL (無效的參數(shù))lseek(7, -2655, SEEK_CUR)               = 1441read(7, "\n(defvar exec-path-from-shell-de"..., 4096) = 4096

      這很明顯是跟 exec-path-from-shell 有關(guān)啊。

      通過查看 exec-path-from-shell 的實現(xiàn),發(fā)現(xiàn) exec-path-from-shell 的實現(xiàn)原理是通過實際調(diào)啟一個 shell,然后輸出 PATH 和 MANPATH 的值的。 而且對于 bash 來說,默認的啟動參數(shù)為 -i -l(可以通過exec-path-from-shell-arguments來設(shè)置)。也就是說 bash 會作為交互式的登錄shell來啟動的,因此會加載 .bash_profile 和 .bashrc

      既然發(fā)現(xiàn)跟 exec-path-from-shell 這個包有關(guān),而且據(jù)說這個包對 Linux 其實意義不大,那不如直接禁用掉好了。

      dotspacemacs-excluded-packages '(exec-path-from-shell)

      再次重啟Emacs,發(fā)現(xiàn)這次啟動速度明顯快了許多了。

      感謝各位的閱讀!關(guān)于“使用strace查找Emacs啟動阻塞的原因有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


      本文名稱:使用strace查找Emacs啟動阻塞的原因有哪些
      標題URL:http://ef60e0e.cn/article/gogsso.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        永清县| 海晏县| 化州市| 商南县| 桂阳县| 开封市| 北碚区| 宝鸡市| 台中市| 高唐县| 安陆市| 潜山县| 娄底市| 甘孜县| 循化| 东兰县| 开封市| 元氏县| 泰顺县| 扶风县| 镇坪县| 伊吾县| 龙胜| 永城市| 湖北省| 周口市| 五华县| 岑溪市| 建宁县| 庆阳市| 辽宁省| 泗阳县| 古蔺县| 庐江县| 东光县| 玉屏| 娱乐| 来宾市| 周宁县| 东兰县| 彝良县|