https://github.com/python/cpython/commit/d325cddc6bfc2b997f04b8d21b7a2f7d211881dc
commit: d325cddc6bfc2b997f04b8d21b7a2f7d211881dc
branch: main
author: Pablo Galindo Salgado <[email protected]>
committer: pablogsal <[email protected]>
date: 2025-09-11T14:32:08+01:00
summary:

gh-138704: Add PermissionError messages to profiling.sampling (#138705)

files:
M Lib/profiling/sampling/__main__.py

diff --git a/Lib/profiling/sampling/__main__.py 
b/Lib/profiling/sampling/__main__.py
index 3f04ba850425a6..a76ca62e2cda50 100644
--- a/Lib/profiling/sampling/__main__.py
+++ b/Lib/profiling/sampling/__main__.py
@@ -1,6 +1,66 @@
 """Run the sampling profiler from the command line."""
 
+import sys
+
+MACOS_PERMISSION_ERROR = """\
+🔒 Permission Error: Unable to access process memory on macOS
+
+Tachyon needs elevated permissions to profile processes. Try one of these 
solutions:
+
+1. Try running again with elevated permissions by running 'sudo -E !!'.
+
+2. If targeting system Python processes:
+   Note: Apple's System Integrity Protection (SIP) may block access to system
+   Python binaries. Consider using a user-installed Python instead.
+"""
+
+LINUX_PERMISSION_ERROR = """
+🔒 Tachyon was unable to acess process memory. This could be because tachyon
+has insufficient privileges (the required capability is CAP_SYS_PTRACE).
+Unprivileged processes cannot trace processes that they cannot send signals
+to or those running set-user-ID/set-group-ID programs, for security reasons.
+
+If your uid matches the uid of the target process you want to analyze, you
+can do one of the following to get 'ptrace' scope permissions:
+
+* If you are running inside a Docker container, you need to make sure you
+  start the container using the '--cap-add=SYS_PTRACE' or '--privileged'
+  command line arguments. Notice that this may not be enough if you are not
+  running as 'root' inside the Docker container as you may need to disable
+  hardening (see next points).
+
+* Try running again with elevated permissions by running 'sudo -E !!'.
+
+* You can disable kernel hardening for the current session temporarily (until
+  a reboot happens) by running 'echo 0 | sudo tee 
/proc/sys/kernel/yama/ptrace_scope'.
+"""
+
+WINDOWS_PERMISSION_ERROR = """
+🔒 Tachyon requires administrator rights to access process memory on Windows.
+Please run your command prompt as Administrator and try again.
+"""
+
+GENERIC_PERMISSION_ERROR = """
+🔒 Tachyon was unable to access the target process due to operating
+system restrictions or missing privileges.
+"""
+
 from .sample import main
 
+def handle_permission_error():
+    """Handle PermissionError by displaying appropriate error message."""
+    if sys.platform == "darwin":
+        print(MACOS_PERMISSION_ERROR, file=sys.stderr)
+    elif sys.platform.startswith("linux"):
+        print(LINUX_PERMISSION_ERROR, file=sys.stderr)
+    elif sys.platform.startswith("win"):
+        print(WINDOWS_PERMISSION_ERROR, file=sys.stderr)
+    else:
+        print(GENERIC_PERMISSION_ERROR, file=sys.stderr)
+    sys.exit(1)
+
 if __name__ == '__main__':
-    main()
+    try:
+        main()
+    except PermissionError:
+        handle_permission_error()

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to