如何终止使用C语言的系统函数调用执行的后台进程.例如,我有一个编译的应用程序调用"fooprocess".然后我想编写一个程序,使用系统函数在后台执行fooprocess应用程序,请参阅下面的代码,
const char app[] = "fooprocess &";
system(app);
Run Code Online (Sandbox Code Playgroud)
如您所见,有一个"&"字符,以便我可以在后台运行fooprocess应用程序.我该怎样杀死这个过程?
非常感谢.
很抱歉,如果这是重复的,但我不太确定我需要使用哪些术语来查找此问题的现有答案.
我正在尝试提高应用程序的启动性能,伪代码看起来有点像这样.
LoadBigFileFromDisk(); //slow
SetupNetwork(); //even slower
UseBigFileFromDisk();
Run Code Online (Sandbox Code Playgroud)
我认为第一步是磁盘绑定,另一个是网络绑定(并且速度较慢),我可以在后台线程中运行第一步(当前正在玩ThreadPool.QueueUserWorkItem,但不确定这是否是最好的方式)并提高性能一点点.
它有效,但令我担心的是,我依靠的第二步足够慢,第一步完成.
我知道我可以在_done某个地方设置一个布尔值while !,但是有更优雅/惯用的解决方案吗?
(不是.Net 4.0,所以虽然我对基于任务的感兴趣,但我需要后备解决方案).
我正在使用xcode 4.2并构建一个iphone应用程序,并且有一个视图,当打开时播放音频流.
我试图实现的是让应用程序继续播放即使它进入后台.
我已经尝试了在stackoverflow或其他地方找到的任何可能的解决方案(并且有许多可用的),但无法使其工作.当应用程序进入后台时,音频停止,当我再次打开应用程序时,音频继续.
在我的Info.plist中,我设置了2行:
Required Background Modes -> App plays audio&
Application does not run in background -> NO
我错过了什么?还有什么需要继续在后台播放音频?
先感谢您.
编辑:我在这个问题上看到很多答案,建议使用AVAudio Framework.MPMoviePlayerController是否有可能无法在后台播放流?我应该换成AVAudio吗?
编辑2:
好的,似乎对我来说太复杂了.我给出了确切的代码,希望这会有所帮助.
RadioStreamer.h
#import <UIKit/UIKit.h>
#import "MediaPlayer/MediaPlayer.h"
@interface RadioStreamer : UIViewController {
MPMoviePlayerController *player;
IBOutlet UIButton *playButton;
IBOutlet UIButton *pauseButton;
}
@property (nonatomic, retain) MPMoviePlayerController *player;
@property (nonatomic, retain) IBOutlet UIButton *playButton;
@property (nonatomic, retain) IBOutlet UIButton *pauseButton;
- (IBAction)playButtonPressed:(id)button;
- (IBAction)pauseButtonPressed:(id)button;
- (void) playAudio;
- (void) pauseAudio;
@end
Run Code Online (Sandbox Code Playgroud)
RadioStreamer.m
#import "RadioStreamer.h"
#import "tabbartestAppDelegate.h"
@implementation …Run Code Online (Sandbox Code Playgroud) 我需要每隔50秒左右将一些数据写入数据库.它类似于在后台运行并静默执行其工作的Windows服务.在我的情况下,启动和停止不是一个选项,因为我需要将少量先前插入的数据存储在内存中.使用Windows Azure或AWS时,最佳解决方案是什么?
谢谢.
cloud azure background-process long-running-processes amazon-web-services
我无法从运行后台任务的Windows运行时组件连接到sqlite数据库.我包含了所有需要的dll,我为主项目添加了相同的方式..但是它不起作用..显示了200个错误..我关注这篇文章:https://github.com/praeclarum/sqlite-net/issues/104
但我仍然得到错误.. 2这样的错误是:
错误2 Windows运行时类'SQLite.SQLiteException'具有无效的基类型'System.Exception'.不允许导出自定义异常类型.D:\ MCM-22-Jan-2013\CCM\TileBackground\SQLite.cs 46 15 TileBackground
错误92类型"SQLite.TableMapping.Column"是嵌套类型.嵌套类型无法导出到Windows运行时.D:\ MCM-22-Jan-2013\CCM\TileBackground\SQLite.cs 1390 16 TileBackground
我在Apache Tomcat上使用JSP/Servlet.我必须每10分钟运行一次方法.我怎样才能做到这一点?
我试图允许我的应用程序在后台运行超过10分钟,根据这个和我的好在下面.(我想使用长时间运行来跟踪位置,我的代码只是使用计数器进行测试)任何人都可以帮助指出问题是什么?
实现长时间运行的后台任务
对于需要执行更多执行时间的任务,您必须请求特定权限才能在后台运行它们而不会被挂起.在iOS中,只允许在后台运行特定的应用类型:
在后台播放用户可听内容的应用,例如音乐播放器应用
随时向用户通知其位置的应用,例如导航应用
支持互联网协议语音(VoIP)的应用
需要下载和处理新内容的报亭应用程序从外部附件接收定期更新的应用程序
实现这些服务的应用程序必须声明它们支持的服务,并使用系统框架来实现这些服务的相关方面.声明服务可以让系统知道您使用哪些服务,但在某些情况下,系统框架实际上会阻止您的应用程序被挂起.
- (void)viewDidLoad {
[super viewDidLoad];
counterTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:^{
}];
count=0;
theTimer=[NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(countUp)
userInfo:nil
repeats:YES];
}
- (void)countUp {
{
count++;
NSString *currentCount;
currentCount=[[NSString alloc] initWithFormat:@"%ld",count];
theCount.text=currentCount;
[currentCount release];
}
}
Run Code Online (Sandbox Code Playgroud)
另一个问题:我可以永远在后台运行iOS应用程序吗?
----编辑代码添加位置,仍然没有运行超过10分钟,任何帮助我做错了什么?
- (void)viewDidLoad {
[super viewDidLoad];
count=0;
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
counterTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:^{
// If you're worried about exceeding 10 minutes, …Run Code Online (Sandbox Code Playgroud) 我有Resque工作人员通常不应该花费大约1-5分钟的时间来运行,但是这些工人经常会"陷入困境"并且闲置,堵塞工人并无所事事.
因此,我想定期检查运行时间超过X时间的工人并清除它们.但我需要自动执行此操作,因此我不必Resque.workers.each {|w| w.unregister_worker}每隔几个小时亲自进入并手动清除它们().
这需要在Heroku上运行.
我创建了一个任务,开始像这样的远程工作
task mytask(type: Exec) {
commandLine 'ssh'
args '-f -l me myserver ./start'.split(' ')
}
Run Code Online (Sandbox Code Playgroud)
并且它有效,但是,它似乎在等待作业终止。但是它永远不会终止,也不会终止。
在命令行中执行相同的操作是有效的:由于进行了-f切换,因此ssh命令在后台执行。
我尝试将'>&' /dev/null(csh stdout和stderr redirect)添加到命令行,但是没有成功。同样显而易见的&是什么也没做。我还将命令行提取到脚本中,并且始终相同:Gradle等待终止。
我已经通过使用脚本并在脚本中同时重定向stdout和stderr来解决了该问题。我的问题来自于令人困惑的重定向……通过传递,'>&' /dev/null我重定向了远程计算机上的流,但是需要的是在本地计算机上进行重定向(即,不将重定向操作符放在引号中)。
我阅读了很多文章,阅读了许多StackOverflow帖子并尝试了不同的解决方案,但我无法让它发挥作用.
对于与蓝牙耳机通信的应用程序,用户必须能够在用户按下耳机上的按钮时启动/停止秒表.按下此按钮时,我收到一个蓝牙事件并启动秒表(在后台接收此蓝牙事件不是问题).秒表启动后,我用它AVSpeechSynthesizer来说"秒表开始".现在出现了我的问题:我希望每分钟都有一个文本到演讲,说出已经过去的分钟数.但是当应用程序在后台时......
我读过这样的解决方案:
var bgTask = UIBackgroundTaskIdentifier()
bgTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {
UIApplication.shared.endBackgroundTask(bgTask)
})
let timer = Timer.scheduledTimer(timeInterval: 60.0, target: self, selector: #selector(notificationReceived), userInfo: nil, repeats: true)
RunLoop.current.add(timer, forMode: RunLoopMode.defaultRunLoopMode)
Run Code Online (Sandbox Code Playgroud)
它确实有效,但我找不到任何关于此代码在生产中的稳定性(从App Store下载应用程序时).当应用程序在后台时,计划的本地通知也无法触发任何代码.即使是财产postUtteranceDelay的AVSpeechUtterance似乎不太稳定.我将属性设置为460秒,但是文本在随机56秒后被说出......
我为我的应用程序打开了几乎所有的后台模式.
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
<string>bluetooth-central</string>
<string>fetch</string>
<string>remote-notification</string>
</array>
Run Code Online (Sandbox Code Playgroud)
其他人建议制作一个无声的音轨.但似乎使用那种"无声轨道"的应用程序被Apple Review团队拒绝了.
令我印象最深刻的是,像Runkeeper和Seconds Interval Timer这样的应用程序可以完成他的工作.即使我打开飞行模式并禁用应用程序中的所有设置(如推动,动作感应).那么,为什么我找不到可行的解决方案......?
有没有人有建议从哪里开始?