[Linux] 取出一個執行中的 process 的 stdout/stderr

[Linux] 取出一個執行中的 process 的 stdout/stderr

今天在用公司的 Github Actions 跑 CI,

結果 Terraform 跑了超久跑不完,

但因為 terraform 指令也不是我執行的,要怎麼看到它的 stdout/stderr 呢?

 

問了一下 ChatGPT (程式設計師是不是很快就要被取代啦…),

發現了一個之前不知道的方法,

那就是利用我已知的 strace 技能,

但加上  -e write 這個參數,就能把寫到 stdout 的東西列出來了~

 

來看一下執行效果吧:

我下的指令是下面這個,13586 是我要看的 process ID (PID),

加了 -s 256 的參數好讓它每行顯示到 256 個字元 (平常是截斷在 32 字元):

$ sudo strace -f -p 13586 -e write -s 256

strace: Process 13586 attached with 9 threads
[pid 13594] --- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=30, si_uid=1000} ---
[pid 13594] write(2, "2023/03/06 14:46:54 [TRACE] dag/walk: vertex \"module.test.module.mysql_db_version_control.null_resource.create-database (expand)\" is waiting for \"module.test.module.mysql_db_version_control.var.mysql (expand)\"\n", 208) = 208
[pid 13590] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.module.self_signed_tls.tls_private_key.cert (expand)\" is waiting for \"module.myapp.module.self_signed_tls.var.rsa_bits (expand)\"\n", 192) = 192
[pid 13590] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.var.azure_stack_fqdn (expand)\" is waiting for \"module.myapp (expand)\"\n", 133) = 133
[pid 13589] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.var.app_fqdns (expand)\" is waiting for \"module.myapp (expand)\"\n", 126) = 126
[pid 14713] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"provider[\\\"registry.terraform.io/hashicorp/kubernetes\\\"] (close)\" is waiting for \"module.myapp.kubernetes_namespace.test (expand)\"\n", 178) = 178
[pid 13589] --- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=30, si_uid=1000} ---
[pid 13590] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.module.self_signed_tls (expand)\" is waiting for \"module.myapp (expand)\"\n", 135) = 135
[pid 13589] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.var.internal_agent_info (expand)\" is waiting for \"module.myapp (expand)\"\n", 136) = 136
[pid 13590] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.helm_release.test-common (expand)\" is waiting for \"module.myapp.var.app_acr (expand)\"\n", 148) = 148
......

 

基本上這就會將  write() 這個 API 的參數列出來,

所以 terraform 寫到 stdout/stderr 的東西就可以看的到囉~

(本頁面已被瀏覽過 109 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料