我是Mac OS X世界的新手,但我有Windows开发技能.
我需要开发一个从Web服务上传/下载文件的守护进程(在Windows上将是Windows服务).
我的问题是:是否有可能创建一个用Objective-C编写的应用程序,它将成为守护进程(上传/下载)并在操作系统开始使用launchd时启动它?或者还有另一种创建守护进程的方法?
谢谢
在KEXT中,我通过vnode或文件范围监听器监听文件关闭.对于某些(极少数)文件,我需要将文件路径发送到我的系统守护程序,该守护程序执行一些处理(这必须在守护程序中发生)并将结果返回给KEXT.需要阻止文件关闭调用,直到我从守护程序获得响应.根据结果我需要在close调用中进行一些操作并成功返回close调用.论坛上有很多关于KEXT通信相关主题的讨论.但它们并不具有决定性,而且看起来很老(2002年左右).此要求可以由FtlSendMessage(...)Win32 API 处理.我在Mac上寻找相同的东西
以下是我所看到的并希望总结我的理解:
mach_msg,mach_port_allocate,bootstrap_look_up)并不显得关键绩效指标.mach_msg_send_from_kernel可以使用mach API ,但仅此一点对双向通信没有帮助.我的理解是对的吗?ioctl/sysctl:我对他们了解不多.根据我的阅读,它不推荐使用,特别是对于双向通信支持的平台是(10.5以后).所以看看这个要求,有人可以建议并提供一些关于这个主题的指示吗?
提前致谢.
我正在开发一个简单的launchdaemon,它将文件从一个目录复制到另一个目录.我已经把文件转移得很好了.
我只是希望目录中的文件是.mp3而不是.dat
一些文件看起来像这样:
6546785.8786.dat
3678685.9834.dat
4658679.4375.dat
我希望它们看起来像这样:
6546785.8786.mp3
3678685.9834.mp3
4658679.4375.mp3
这是我在bash脚本末尾重命名文件扩展名的内容.
cd $mp3_dir
mv *.dat *.mp3
exit 0
Run Code Online (Sandbox Code Playgroud)
问题是该文件是*.mp3而不是6546785.8786.mp3
当另一个6546785.8786.dat文件导入$ mp3_dir时,*.mp3将被新的.mp3覆盖
我需要重命名只是中的.dat文件扩展名.MP3并保持文件名.
想法?建议?
我们有一个启动守护进程(必然由于各种原因)以root身份运行,并通过网络与服务器组件通信.它需要对服务进行身份验证,因此在首次获取密码时,我们会将其保存到系统密钥链中.在随后的发布中,我们的想法是从密钥链中检索密码并使用它来验证网络服务.
这一直运行良好,但在macOS 10.12上,现有代码停止工作,我们已经完全不知道如何解决这个问题.归结为:
无论我们是保存新密码还是检索旧密码,我们都会使用以下方法获取对系统密钥链的引用:
SecKeychainCopyDomainDefault(kSecPreferencesDomainSystem, &system_keychain);
Run Code Online (Sandbox Code Playgroud)
我们还禁用了用户交互以获得良好的衡量标准,尽管我们希望它在守护进程的上下文中已经关闭.
SecKeychainSetUserInteractionAllowed(false);
Run Code Online (Sandbox Code Playgroud)
将新密码保存到钥匙串时,我们会使用
OSStatus status = SecKeychainAddInternetPassword(
system_keychain,
urlLength, server_base_url,
0, NULL,
usernameLength, username,
0, NULL,
0,
kSecProtocolTypeAny, kSecAuthenticationTypeAny,
passwordLength, password,
NULL);
Run Code Online (Sandbox Code Playgroud)
这很有用.报告成功,我可以在Keychain Access.app的"系统"钥匙串中看到该项目.
在我们的守护进程的后续运行中检索它是通过以下行完成的:
status = SecKeychainFindInternetPassword(
system_keychain,
urlLength, url,
0, NULL,
usernameLength, username,
0, NULL,
0,
kSecProtocolTypeAny, kSecAuthenticationTypeAny,
&passwordLength, &password_data,
NULL);
Run Code Online (Sandbox Code Playgroud)
不幸的是,errSecAuthFailed由于我们不清楚的原因,这已经开始返回.
我们检查了一些额外的细节以及我们尝试过的东西,但无济于事:
SecKeychainAddInternetPassword,但这似乎没有任何区别.SecKeychainUnlock(),但正如文档所示,这似乎是多余的.Keychain Access.app原因SecKeychainFindInternetPassword()产生errSecItemNotFound,正如你所期望的.所以它绝对可以找到保存的项目,它不允许读取它.钥匙串文档不是很容易阅读,而是部分相当重复.("为了做Y,你需要做Y",但没有提到为什么你想要做Y.)尽管如此,我认为我已经完成并理解了大部分内容.我们特定设置的各个方面都没有详细介绍(从守护程序访问),但似乎很清楚,访问以前由同一个应用程序保存的项目不需要任何特殊授权或身份验证.这与我们所看到的行为直接矛盾.
有任何想法吗?
我有一个守护进程(用Obj C编写)运行,我想在一些用户登录时执行一些操作.守护进程是否可以知道特定用户何时登录或退出OSX?登录时是否会抛出任何通知?我想避免使用Log in Item或Launch Agent.而且我还想避免轮询定时器来检查登录用户.
我在python3中为Ubuntu编写了一个脚本,该脚本应该在所有X分钟内执行,并且应该在登录后自动启动.因此我想创建一个守护进程(这是正确的解决方案吗?)但我还没有找到任何模块/ python3的示例,仅适用于python 2.X. 你知道我能用的东西吗?
谢谢,
我写了一个守护进程是MAC OS 10.8.
我将Unix可执行文件复制到启动项.
我创建了一个.plist文件,其中Label,KeepAlive标志设置为YES,progrrammArguments数组的Item0设置为/ Libray/StartupItems/updaterDaemon.
我希望这个守护进程在系统启动时以root身份运行,因此我将其复制到startupItems中,但守护进程没有启动.
请告诉我我做错了什么或者我需要做什么才能在系统/机器启动时启动和运行这个守护进程.
提前致谢.
我正在尝试在启动时在我的机器上运行可执行文件(mbp retina osx mountain lion).
这是脚本的样子:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.netresponsibility.daemon</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/net-responsibility</string>
<string>--daemon</string>
</array>
<key>OnDemand</key>
<true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
我把它放在/ System/Library/LaunchDaemons /目录中.它的名称com.netresponsibility.daemon.plist和权限与其他所有权限相同.
-rw-r--r-- 1 root wheel 420 Oct 11 12:39 com.netresponsibility.daemon.plist
Run Code Online (Sandbox Code Playgroud)
当我重新启动时,不会调用可执行文件.关于我缺少什么的任何想法?