C posix_openpt()-错误-无法访问tty,作业控制已关闭

C posix_openpt()-错误-无法访问tty,作业控制已关闭,c,linux,bash,C,Linux,Bash,我正在使用一个psuedo终端/bin/sh-I,方法是在C语言中调用posix_openpty()然后fork()的普通命令 当我像这样从命令行GUI终端运行时 $ ./MyTerminal # ./MyTerminal [Service] User=debian 或 或者像这样 $ ./MyTerminal # ./MyTerminal [Service] User=debian 一切都很好,正如预期的那样,没有问题 但是,当我创建这样的systemd服务文件时,它工作得很好 [

我正在使用一个psuedo终端/bin/sh-I,方法是在C语言中调用posix_openpty()然后fork()的普通命令

当我像这样从命令行GUI终端运行时

$ ./MyTerminal
# ./MyTerminal
[Service]
User=debian

或者像这样

$ ./MyTerminal
# ./MyTerminal
[Service]
User=debian
一切都很好,正如预期的那样,没有问题

但是,当我创建这样的systemd服务文件时,它工作得很好

[Service]
User=root
但是当我试图让systemd像这样以普通用户的身份运行它时

$ ./MyTerminal
# ./MyTerminal
[Service]
User=debian
/bin/sh-i的第一个输出是

/bin/sh: 0: can't access tty; job control turned off $
终端也不能正常工作

当我运行/bin/bash时,fork()w/posix_openpty()会返回这个值,但终端通常工作正常

 bash: cannot set terminal process group (-1): Inappropriate ioctl for device 
 bash: no job control in this shell

这是一个很奇怪的问题,因为在systemd之外运行时,一切都很完美。我在另外一个问题中看到了这个问题,但没有明确的解决方案。那么,为了让systemd完美地运行我的文件,我需要做哪些更改?谢谢你的帮助。

systemd
下运行的东西没有控制终端,我敢打赌(实际上,我几乎可以保证…)。如果您希望它在
systemd
下运行,请更改假定终端存在的代码-或者根本不尝试使用终端,或者至少在尝试操作之前检查它的存在性…谢谢,但我需要终端,是的,我以各种方式检查它的存在性-它存在,问题是当不以root身份运行时。是的,即使它运行时,其行为也不同。是否有其他(或多或少)跨平台的方式来启动依赖于终端的二进制文件?您(作为root)su-c./MyTerminal debian得到了什么?