24
A
回答
25
您可以將GDB到正在運行的進程,然後在調試器中調用的umask:
(gdb) call umask(0)
[Switching to Thread -1217489200 (LWP 11037)]
$1 = 18
(gdb) call umask(18)
$2 = 0
(gdb)
(注:18 = O22)
這表明,有可能是一個非常醜陋的方式來獲得使用ptrace的umask。
1
如果你當前的進程,你可以寫一個文件到/ tmp,並檢查其設置。一個更好的解決方案是調用umask(3)傳遞零 - 該函數返回調用之前的設置 - 然後通過將該值傳遞迴umask將其重置。
另一個進程的umask似乎沒有公開。
9
從GNU C庫手冊:
這裏是示出如何使用
umask
讀掩模不會永久改變其一個例子:mode_t read_umask (void) { mode_t mask = umask (0); umask (mask); return mask; }
然而,最好是使用
getumask
如果您只想讀取 掩碼值,因爲它是可重入的(至少如果您使用的是GNU操作系統的 )。
getumask
是glibc特定的,但。所以如果你重視可移植性,那麼非重入式解決方案是唯一的解決方案。
編輯:我剛剛通過Linux源代碼grep爲->umask
。沒有任何地方會讓你獲得另一個過程的祕密。此外,沒有getumask
;顯然這是一個赫德唯一的事情。
0
一位同事剛剛向我展示了一個命令行模式。我總是運行emacs,所以在下面的例子中。該perl
是我的貢獻:
sudo gdb --pid=$(pgrep emacs) --batch -ex 'call/o umask(0)' -ex 'call umask($1)' 2> /dev/null | perl -ne 'print("$1\n")if(/^\$1 = (\d+)$/)'
2
與Linux內核4.7開始,umask是在/proc/<pid>/status
可用。
相關問題
- 1. 從已經運行的進程中獲取OutputStream
- 2. linux - 進程已經在運行的錯誤
- 3. 從已經運行的進程中創建子進程對象
- 4. linux - 獲取進程的pid
- 5. 獲取時間jMeter線程已經運行
- 6. 改變已經運行的進程的信號配置(SIGHUP)
- 7. 獲取OSGi運行時中已經安裝的bundle的InputStream?
- 8. Linux互斥鎖檢查程序是否已經在運行?
- 9. 是否可以附加到已經運行的gdb進程?
- 10. Python - 將參數傳遞給已經運行的進程
- 11. 是否可以從已經運行的進程構造ProcessStartInfo?
- 12. Java守護進程並連接到已經運行的實例
- 13. strace如何連接到已經運行的進程?
- 14. 獲取運行進程的實例
- 15. 獲取運行firefox進程的PID
- 16. SCP和UMASK Linux Centos
- 17. 獲取正在運行的進程給定的進程句柄
- 18. 已經運行的應用程序現在獲取套接字錯誤10013
- 19. 運行已經在OS X上運行的應用程序
- 20. 如何捕獲從init.d運行的Linux守護進程的pid
- 21. Java kill程序如果已經運行
- 22. 如果進程已經運行,終止bash腳本
- 23. 如何知道進程已經運行了多長時間?
- 24. 服務器可能已經在另一個進程中運行
- 25. 檢查如果PHP進程已經運行
- 26. 通過正在運行的進程獲取已使用庫的列表(unix)
- 27. Android - 獲取IP,如果WiFi已經在AP模式下運行
- 28. LINQ To SQL - 獲取已運行的SQL
- 29. 有沒有辦法使用java獲取/掛鉤/附加已經運行的進程?
- 30. 進程已經死亡
當前進程?還是一個外國程序? – 2008-10-03 00:26:34
前段時間有一個[補丁](https://lkml.org/lkml/2012/5/4/451)報告了進程'/ proc/pid/status中的umask'和`/ proc/pid/stat`。但它似乎沒有進入主線內核。 – 2015-11-18 04:13:19
[unix.se]上的同一問題:[當前pid進程的umask](http://unix.stackexchange.com/q/258284) – 2016-01-29 23:06:52