Im trying to list the details of specific processes using a UITableView. It displays perfectly when run on the Xcode simulator. However, it is malformed when deployed on the actual device. Perplexing thing is, when I perform the “ps aux” command on both the Mac and the iPhone, formatting of the outputs seem identical.
This is how it looks like in the simulator :

This is how it looks like on the real device :

Here is my code for the controller displaying these views :
viewDidLoad :
NSLog(@"myString is :%@", myString);
int processID = [myString intValue];
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/ps"];
arguments = [NSArray arrayWithObjects: @"aux", [NSString stringWithFormat:@"%i", processID],nil];
[task setArguments: arguments];
NSPipe *pipe;
pipe = [NSPipe pipe];
//[task setStandardOutput: pipe];
[task setStandardOutput:pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *string;
string = [[NSString alloc] initWithData: data
encoding: NSUTF8StringEncoding];
// NSLog(@"%@",string);
NSArray *lines= [string componentsSeparatedByString:@"\n"];
NSString *lastline = [lines objectAtIndex:[lines count]-2];
// NSLog(@"%@",lastline);
lines2= [lastline componentsSeparatedByString:@" "];
NSLog(@"%@",lines2);
for (int i=0; i<[lines2 count]; i++) {
if([[lines2 objectAtIndex:i] isEqualToString:@""]){
[lines2 removeObjectAtIndex:i];
}
}
for (int i=0; i<[lines2 count]; i++) {
if([[lines2 objectAtIndex:i] isEqualToString:@""]){
[lines2 removeObjectAtIndex:i];
}
}
NSLog(@"Lines 2 is%@",lines2);
NSLog(@"Status is %@",[lines2 objectAtIndex:7]);
self.title = @"Process Info";
label = [[NSMutableArray alloc]init];
[label addObject:@"User:"];
[label addObject:@"Process ID:"];
[label addObject:@"CPU(%):"];
[label addObject:@"MEM(%):"];
[label addObject:@"VSZ:"];
[label addObject:@"RSS:"];
[label addObject:@"TT:"];
[label addObject:@"STAT:"];
[label addObject:@"Time Started:"];
[label addObject:@"Time Elapsed:"];
[label addObject:@"Launch Command:"];
[super viewDidLoad];
cellForRowAtIndexPath:
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
NSString *cellValue = [label objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
cell.textColor = [UIColor colorWithRed:154.0/255.0 green:14.0/255.0 blue:2.0/255.0 alpha:1];
cell.font = [UIFont systemFontOfSize:16.0];
UILabel *label2 = [[[UILabel alloc] initWithFrame:CGRectMake(120.0, 0, 240.0,
tableView.rowHeight)] autorelease];
label2.font = [UIFont systemFontOfSize:16.0];
NSString *cellValue1 = [lines2 objectAtIndex:indexPath.row];
label2.text = cellValue1;
label2.textAlignment = UITextAlignmentLeft;
label2.textColor = [UIColor blackColor];
label2.autoresizingMask = UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:label2];
return cell;
numberOfRowsInSection:
return [label count];
dealloc:
[myString release];
[arguments release];
//[lines2 release];
[ResultStringID release];
[values release];
[label release];
[super dealloc];
The output of “ps aux” command on Mac :

The output of “ps aux” command on iPhone (Through an SSH shell) :

There’s no guarantee that
pson iOS does the same thing as on other platforms. There’s no UI that would allow a user to access thepscommand on iOS devices, so you’re lucky that there’s apscommand at all. Try logging the output from the command to see what you’re getting, but don’t be surprised if there’s not much there.