我有2個進程P1和P2。 P1運行爲根,並且創建與下面的調用信號量:semget以「權限被拒絕」失敗
了semget(鍵1,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH | IPC_CREAT);
我試圖在另一個進程P2中獲取相同信號量的句柄,該進程在正常用戶的上下文中運行。在此過程中,semget調用成功,但semop調用失敗,並顯示「權限被拒絕」(Errno = 13)。
任何指針都會有很大的幫助。
〜PS7
我有2個進程P1和P2。 P1運行爲根,並且創建與下面的調用信號量:semget以「權限被拒絕」失敗
了semget(鍵1,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH | IPC_CREAT);
我試圖在另一個進程P2中獲取相同信號量的句柄,該進程在正常用戶的上下文中運行。在此過程中,semget調用成功,但semop調用失敗,並顯示「權限被拒絕」(Errno = 13)。
任何指針都會有很大的幫助。
〜PS7
什麼是我們所談論的語言?
我認爲在導入S_常量時會出現一些錯誤,以至於它們爲空並且不起作用。
那麼用位掩碼進行暴力測試呢? 嘗試使用直接IPC_CREAT | 0666
我的2美分:)
「權限被拒絕」/EACCES
是的,當然,與非特權過程P2
試圖semget
爲它無法獲得一個現存的信號是一致的。所以,也許在密鑰下已經有一個現存的信號量,它缺少所需的S_IWOTH|S_IROTH
權限。 (也許從P1
的早期版本的剩餘?)
ipcs -s
說什麼信號量的權限是?如果您將IPC_EXCL
添加到P1
的semget
呼叫中,會發生什麼情況?它會失敗嗎?
使用S_IRUSR和S_IWUSR指定讀取和 共享存儲器段的所有者寫權限,和S_IROTH和S_IWOTH指定其他標誌讀取和寫入權限 如shmget的第三arguement()。
IPC_CREATE只保證應該根據鍵值創建新的共享內存段。如果用鍵值指定的段存在,通常shmget()會失敗。
此項有很長的時間,但我是有
同樣的問題0600 | IPC_CREAT
,但我已經固定須藤
運行我的應用程序