su
我有这样的Python代码。
try:
while some_cond_is_still true:
....
except KeyboardInterrupt: # Handle CTRL+C
...
虽然我自己运行python脚本可以很好地处理KeyboardInterrupt,但是如果我像这样用su
以另一个用户身份运行它,则无法处理它。
su <some_other_user> -c 'python myprogram.py <args>'
我该如何解决这个问题?
如果使用su <user> -c ...
,则将在指定用户的conext中建立另一个shell。
我认为:如果您按CTRL+C
,则取决于外壳,是否中断信号将到达python脚本。
尝试su <user> -c 'watch ls'
查看,是否CTRL + C
将停止观看ls。>>
[不确定,您打算如何处理脚本,但是如果您“仅”想要中止正在运行的脚本,则可以执行以下操作(或者替代CTRL + C
:]]
通过按CRTL + Z
停止此过程(用户外壳程序)。显示作业编号和停止的进程。现在,您可以使用作业号取消进程,例如kill %1
su
-c (--command)
时,su命令将与命令中指示的用户创建新会话。要解决此问题,请使用选项--session-command
。在这种情况下,命令将为:su user_name --session-command 'python myprogram.py <args>'
在这种情况下,您应该能够捕获CTRL + C中断
。
su